Peter Mairhofer: LocationMatch...ich checks nicht

Hallo!

Grrrr, ich checks einfach nicht was hier der Fehler sein soll. Ich hätte gerne

/cgi-bin/awstats.pl --> deny
/cgi-bin/awstats.pl?config=site1 --> allow from a
/cgi-bin/awstats.pl?config=site2 --> allow from b
/cgi-bin/awstats.pl* --> deny

Aber bereits die erste Regel geht nicht:

<LocationMatch "/cgi-bin/awstats.pl$">
        Order deny,allow
        Deny from all
</LocationMatch>

Das dürfte doch nur auf awstats.pl matchen und NUR darauf! Weil ich ja mit dem "$" ende.

Wieso bekomme ich aber ein Deny sowohl für /cgi-bin/awstats.pl als auch für /cgi-bin/awstats.pl?config=site1 ?

Danke und lg,
Peter

  1. Hallo Peter,

    Wieso bekomme ich aber ein Deny sowohl für /cgi-bin/awstats.pl als auch für /cgi-bin/awstats.pl?config=site1 ?

    Weil sich LocationMatch nur auf den Pfad-Teil des URI beschränkt, d.h. der Query-String wird vorher abgetrennt. Sprich: <LocationMatch "/cgi-bin/awstats.pl$"> macht zwar /cgi-bin/awstats.plHalliHallo oder /cgi-bin/awstats.pl/Ciao nicht, aber /cgi-bin/awstats.pl?irgendwas schon.

    Wenn Du an Hand von Query-Strings Zugriffe verbieten willst, dann bleibt Dir vermutlich nur mod_rewrite übrig, wo Du per RewriteCond Query-Strings auf ihren Inhalt überprüfen kannst, also zum Beispiel sowas:

    # Wenn mod_rewrite zur Verfügung steht  
    <IfModule mod_rewrite.c>  
    RewriteEngine On  
      
    # Leere Query-String verbieten  
    RewriteCond %{QUERY_STRING} =""  
    RewriteRule /cgi-bin/awstats\.pl$ -  [F]  
      
    # awstats.pl* verbieten  
    RewriteRule /cgi-bin/awstats\.pl.+$  - [F]  
    </IfModule>  
      
    # Wenn es nicht zur Verfügung steht  
    <IfModule !mod_rewrite.c>  
    <Location /cgi-bin/awstats.pl>  
    # Sicherheitshalber komplett verbieten  
    Order deny,allow  
    Deny from all  
    </Location>  
    </IfModule>
    

    Ungetestet, sollte aber funktionieren (in der zentralen Config oder einer VHost-Config).

    Viele Grüße,
    Christian

    1. Hallo,

      Leere Query-String verbieten

      RewriteCond %{QUERY_STRING} =""
      RewriteRule /cgi-bin/awstats.pl$ -  [F]

      Kleiner Nachtrag: Das verhindert natürlich nicht, dass jemand sowas aufruft wie /cgi-bin/awstats.pl?a=b, wobei a ein Parameter ist, der von awstats.pl nicht interpretiert wird. Du müsstest vermutlich ein komplizierteres Regelwerk bauen, damit Du das so abschotten kannst, wie Du willst.

      Viele Grüße,
      Christian