<-
Apache > HTTP-Server > Dokumentation > Version 2.5 > Rewrite

Zugriffskontrolle mit mod_rewrite

Verfügbare Sprachen:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn 

Dieses Dokument ergänzt die mod_rewrite Referenzdokumentation. Es beschreibt, wie Sie mod_rewrite zur Zugriffskontrolle auf verschiedene Ressourcen verwenden können, sowie weitere verwandte Techniken. Dies beinhaltet viele Beispiele für gängige Verwendungen von mod_rewrite, einschließlich detaillierter Beschreibungen, wie jedes einzelne funktioniert.

Beachten Sie, dass viele dieser Beispiele nicht unverändert in Ihrer speziellen Serverkonfiguration funktionieren werden. Es ist daher wichtig, dass Sie sie verstehen, anstatt die Beispiele einfach auszuschneiden und in Ihre Konfiguration einzufügen.

Siehe auch

top

Verhindern von Bild-"Hotlinking"

Beschreibung:

Die folgende Technik verhindert die Praxis, dass andere Websites Ihre Bilder direkt in ihre Seiten einbinden. Diese Praxis wird oft als "Hotlinking" bezeichnet und führt dazu, dass Ihre Bandbreite verwendet wird, um Inhalte für die Website einer anderen Person bereitzustellen.

Lösung:

Diese Technik beruht auf dem Wert der HTTP_REFERER-Variable, die optional ist. Daher ist es möglich, dass einige Personen diese Einschränkung umgehen. Die meisten Benutzer werden jedoch die fehlgeschlagene Anfrage bemerken, was im Laufe der Zeit dazu führen sollte, dass das Bild von der anderen Website entfernt wird.

Es gibt mehrere Möglichkeiten, mit dieser Situation umzugehen.

Im ersten Beispiel verweigern wir die Anfrage einfach, wenn sie nicht von einer Seite unserer Website stammt. Für dieses Beispiel nehmen wir an, dass unsere Website www.example.com ist.

RewriteCond "%{HTTP_REFERER}"  "!^$"
RewriteCond "%{HTTP_REFERER}"  "!www.example.com" [NC]
RewriteRule "\.(gif|jpg|png)$" "-"                [F,NC]

Im zweiten Beispiel zeigen wir statt einer fehlgeschlagenen Anfrage ein alternatives Bild an.

RewriteCond "%{HTTP_REFERER}"  "!^$"
RewriteCond "%{HTTP_REFERER}"  "!www.example.com"      [NC]
RewriteRule "\.(gif|jpg|png)$" "/images/go-away.png"   [R,NC]

Im dritten Beispiel leiten wir die Anfrage auf ein Bild auf einer anderen Website um.

RewriteCond "%{HTTP_REFERER}"  "!^$"
RewriteCond "%{HTTP_REFERER}"  "!www.example.com"                    [NC]
RewriteRule "\.(gif|jpg|png)$" "http://other.example.com/image.gif"  [R,NC]

Von diesen Techniken sind die letzten beiden am effektivsten, um Personen davon abzuhalten, Ihre Bilder per Hotlink einzubinden, da sie einfach nicht das Bild sehen werden, das sie erwartet haben.

Diskussion:

Wenn Sie lediglich den Zugriff auf die Ressource verweigern möchten, anstatt die Anfrage woanders umzuleiten, kann dies ohne die Verwendung von mod_rewrite erreicht werden:

SetEnvIf Referer example\.com localreferer
<FilesMatch "\.(jpg|png|gif)$">
    Require env localreferer
</FilesMatch>
top

Blockieren von Robots

Beschreibung:

In diesem Rezept besprechen wir, wie man hartnäckige Anfragen von einem bestimmten Robot oder User-Agent blockiert.

Der Standard für den Ausschluss von Robots definiert eine Datei, /robots.txt, die die Bereiche Ihrer Website festlegt, von denen Sie Robots ausschließen möchten. Einige Robots halten sich jedoch nicht an diese Dateien.

Beachten Sie, dass es Methoden gibt, dies ohne die Verwendung von mod_rewrite zu erreichen. Beachten Sie auch, dass jede Technik, die auf dem USER_AGENT-String des Clients basiert, sehr leicht umgangen werden kann, da dieser String geändert werden kann.

Lösung:

Wir verwenden einen Regelsatz, der das zu schützende Verzeichnis und den Client-USER_AGENT angibt, der den bösartigen oder hartnäckigen Robot identifiziert.

In diesem Beispiel blockieren wir einen Robot namens NameOfBadRobot vom Standort /secret/files. Sie können auch einen IP-Adressbereich angeben, wenn Sie den User-Agent nur von einer bestimmten Quelle blockieren möchten.

RewriteCond "%{HTTP_USER_AGENT}"   "^NameOfBadRobot"
RewriteCond "%{REMOTE_ADDR}"       "=123\.45\.67\.[8-9]"
RewriteRule "^/secret/files/"      "-"                   [F]
Diskussion:

Anstatt mod_rewrite hierfür zu verwenden, können Sie dasselbe Ziel mit alternativen Mitteln erreichen, wie hier gezeigt:

SetEnvIfNoCase User-Agent ^NameOfBadRobot goaway
<Location "/secret/files">
    <RequireAll>
        Require all granted
        Require not env goaway
    </RequireAll>
</Location>

Wie oben erwähnt, ist diese Technik trivial zu umgehen, indem man einfach den USER_AGENT-Anfrage-Header ändert. Wenn Sie einen anhaltenden Angriff erleben, sollten Sie erwägen, diesen auf einer höheren Ebene zu blockieren, beispielsweise an Ihrer Firewall.

top

Ablehnung von Hosts in einer Sperrliste

Beschreibung:

Wir möchten eine Liste von Hosts pflegen, ähnlich wie hosts.deny, und diesen Hosts den Zugriff auf unseren Server verweigern.

Lösung:
RewriteEngine on
RewriteMap    hosts-deny  "txt:/path/to/hosts.deny"
RewriteCond   "${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}" "!=NOT-FOUND" [OR]
RewriteCond   "${hosts-deny:%{REMOTE_HOST}|NOT-FOUND}" "!=NOT-FOUND"
RewriteRule   "^"                                      "-"           [F]

##
## hosts.deny
##
## ACHTUNG! Dies ist eine Map, keine Liste, auch wenn wir sie als solche behandeln.
## mod_rewrite parst sie nach Schlüssel/Wert-Paaren, daher muss mindestens
## ein Dummy-Wert "-" für jeden Eintrag vorhanden sein.
##

193.102.180.41 -
bsdti1.sdm.de -
192.76.162.40 -

Diskussion:

Die zweite RewriteCond setzt voraus, dass HostNameLookups aktiviert ist, damit Client-IP-Adressen aufgelöst werden. Wenn dies nicht der Fall ist, sollten Sie die zweite RewriteCond weglassen und das [OR]-Flag von der ersten RewriteCond entfernen.

top

Referer-basierter Umleiter

Beschreibung:

Anfragen basierend auf dem Referer umleiten, von dem die Anfrage kam, mit unterschiedlichen Zielen pro Referer.

Lösung:

Der folgende Regelsatz verwendet eine Map-Datei, um jeden Referer mit einem Umleitungsziel zu verknüpfen.

RewriteMap  deflector "txt:/path/to/deflector.map"

RewriteCond "%{HTTP_REFERER}"              !=""
RewriteCond "${deflector:%{HTTP_REFERER}}" =-
RewriteRule "^"                            "%{HTTP_REFERER}" [R,L]

RewriteCond "%{HTTP_REFERER}"              !=""
RewriteCond "${deflector:%{HTTP_REFERER}|NOT-FOUND}" "!=NOT-FOUND"
RewriteRule "^"                            "${deflector:%{HTTP_REFERER}}" [R,L]

Die Map-Datei listet Umleitungsziele für jeden Referer auf, oder, wenn wir nur zurück dorthin umleiten möchten, woher sie kamen, wird ein "-" in die Map eingetragen:

##
##  deflector.map
##

http://badguys.example.com/bad/index.html    -
http://badguys.example.com/bad/index2.html   -
http://badguys.example.com/bad/index3.html   http://somewhere.example.com/

Verfügbare Sprachen:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn