Marco: Zugriffssteuerung per .htaccess

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

  1. 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

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. 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

  2. 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

    --
    Könnte bitte jemand mal langsam dafür sorgen, dass da draußen nicht dauernd die Filmrolle "Planet der Affen" abgedudelt wird? Danke!
    1. 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

      1. 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>

        1. 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.

    2. [...] 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.