Apache HTTP Server Version 2.5

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.
Verhindern von Bild-"Hotlinking"
Blockieren von Robots
Ablehnung von Hosts in einer Sperrliste
Referer-basierter UmleiterDie 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.
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.
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>
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.
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]
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.
Wir möchten eine Liste von Hosts pflegen, ähnlich wie
hosts.deny, und diesen Hosts den Zugriff auf
unseren Server verweigern.
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 -
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.
Anfragen basierend auf dem Referer umleiten, von dem die Anfrage kam, mit unterschiedlichen Zielen pro Referer.
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/