Zugriffssteuerung per .htaccess
Marco
- webserver
Hallo zusammen,
ich versuche per .htaccess und <FilesMatch>, bzw. <Files> den Werbserver dazu zu bringen, dass bei einem Aufruf von
http://www.domain.de/index.php?method=edit
eine Basic Authentifizierung aufgerufen wird, jedoch beim Aufruf von
http://www.domain.de/index.php
nichts passiert. Hier mein Codebeispiel:
<FilesMatch "^index.php?method=edit$">
AuthType Basic
AuthName "Protected Access"
AuthUserFile .htpasswd
Require user hans
</FilesMatch>
Ich schaffe es trotz sämtlicher Regex-Versuche nicht dieses Problem zu lösen. Meine Frage ist nun ob das überhaupt geht! Frisst die .htaccess überhaupt einen QUERY-STRING? Habt ihr eine Idee?
Gruss,
Marco
Hi,
Ich schaffe es trotz sämtlicher Regex-Versuche nicht dieses Problem zu lösen. Meine Frage ist nun ob das überhaupt geht! Frisst die .htaccess überhaupt einen QUERY-STRING?
Nein, die Direktiven FILES/FILESMATCH nehmen auf Dateinamen Bezug - und index.php?method=edit ist kein Dateiname.
MfG ChrisB
Hi,
Ich schaffe es trotz sämtlicher Regex-Versuche nicht dieses Problem zu lösen. Meine Frage ist nun ob das überhaupt geht! Frisst die .htaccess überhaupt einen QUERY-STRING?
Nein, die Direktiven FILES/FILESMATCH nehmen auf Dateinamen Bezug - und index.php?method=edit ist kein Dateiname.
Hmm, Idee:
RewriteRule ^fakefile.html$ /wievielspueltz.php?gedoens
<Files ~ "fakefile.html">
require valid-user
</Files>
Horst Würfelspitz
Hallo Marco,
Habt ihr eine Idee?
so PHP als Servermodul vorliegen sollte, sieh Dir bitte HTTP-Authentifizierung mit PHP an. Wenn PHP nicht Servermodul sein sollte, ist mod_rewrite erforderlich und es wird 'etwas' komplex:
### .htaccess
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)$
RewriteRule ^index.php$ index.php?AUTH=%1 [L,QSA]
############################################################################
<?php
# index.php
if($_GET['method']=='edit' && $_GET['AUTH']!=''){
verarbeite_auth_string($_GET['AUTH']);
}
else{
header('WWW-Authenticate: Basic realm="unberechtigte Methode"',true,401);
exit();
}
# dein restlicher Steuerfluss
?>
Das ganze ist ungetestet und sollte nur für Auth-Type "basic" funktionieren, was auf die Sicherheitsstruktur der Methode "digest" zurück zu führen ist. Prinzipiell ist aber auch das möglich, nur gleicht die Apache-Konfiguration dann schon einem beträchtlichen Code-Block eines Programms. Was mich zu einem anderen Punkt bringt.
Warum erstellst Du nicht für die Methode "edit" ein extra Script? Dieses könnte ganz normal mit einer Authentifizierung geschützt werden. Das hat den Vorteil, die Authentifizierung beim Webserver zu belassen (wo sie eigentlich auch hingehört), somit kompatibler bei Providerwechsel u. d. g. zu sein, und man kann simpel Auth-Methode "digest" verwenden. Heutzutage muss man auch an die Vorratsdatenspeicherung denken. Passwörter würden u. U. mit Auth-Methode "basic" offen sechs Monate zugänglich sein.
(Ganz nebenbei sieht übrigens die HTTP-Spezifikation für Schreibvorgänge auf dem Server, die durch Datenübermittlung per Request angestoßen werden, die HTTP-Methode POST vor.)
Gruß aus Berlin!
eddi
Hi Eddi,
danke für Deinen Vorschlag. Leider besteht diese Möglichkeit nicht, dass es sich hierbei um ein fertiges Produkt (mediaWiki) handelt, in dessen Quelltext ich keinen Core-Hack beibauen möchte. Leider kann ich dahr auch kein eigenes Skript hierfür schreiben.
Es gibt zwar eigene Extenstions für die mediaWiki, aber in diesem Fall kommt keine ohne einen Core-Hack aus, den ich aber auf alle Fälle vermeiden muss.
Hast Du sonst noch eine Idee?
Gruss,
Marco
Hast Du sonst noch eine Idee?
z.B.
<Files index.php>
saitsfy any
order allow,deny
deny from env=deny
allow from all
setenvifnocase query_string method=edit deny
AuthType Basic
AuthName "Protected Access"
AuthUserFile /path/to/.htpasswd
Require user hans
</Files>
setenvifnocase query_string method=edit deny
Ich sehe gerade, r->args wurde in mod_setenvif (noch) nicht implementiert. Dann musst du auf eine in der httpd.conf im Server-Kontext definierte RewriteRule (+Condition zur Prüfung des QueryStrings) mit dem E-Flag zurückgreifen, um die Umgebungsvariable zu setzen.
[...] Heutzutage muss man auch an die Vorratsdatenspeicherung denken. Passwörter würden u. U. mit Auth-Methode "basic" offen sechs Monate zugänglich sein.
Allerdings wird so etwas (angesurfte Websites inkl. ihrer Header order gar HTTP body) von der Vorratsdatenspeicherung gerade nicht erfasst.