Ich versuche das "ultimative" Anti-Hot-Linking zu schreiben .htaccess ...
Sie können viele Beispiele / Tutorials / Generatoren im Internet finden, aber viele davon sind falsch oder unvollständig (oder sogar beides).
Dies sind die Funktionen, nach denen ich suche:
- Muss die Hot-Verknüpfung für eine Liste von Dateierweiterungen blockieren, wenn HTTP_REFERER eine fremde Site ist.
- Muss Hotlink für die aktuelle Domain (duh) zulassen, ohne sie im .htaccess zu harcodieren.
- Für die aktuelle Domain muss es unter http und https funktionieren.
- Für die aktuelle Domain muss es mit www und ohne www funktionieren.
- Muss in der Lage sein, Ausnahmedomänen zu diesen Regeln hinzuzufügen (wie unser Freund Google) und diese Domänen müssen unter http und https und mit www oder ohne www funktionieren.
Folgendes habe ich bisher erreicht:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com/.*$ [NC]
RewriteRule \.(gif|jpe?g|png|zipx?)$ - [NC,F]
</IfModule>
Meine Fragen:
- Wie vermeide ich es,
mydomain.com
im .htaccess fest zu codieren ? (Es wäre großartig, diesen .htaccess für alle meine Domänen bereitstellen zu können, ohne ihn für jede von ihnen ändern zu müssen.) - In meiner RewriteRule,
gif|jpe?g|png|zipx?
entspricht nichtgif|jpg|jpeg|png|zip|zipx
wahr? (Sorry noch neu bei regulären Ausdrücken.) - Sehen Sie etwas Schlechtes in meinem .htaccess, von dem ich nichts weiß?
Für # 1 weiß ich, dass es etwas möglich ist. Das nächste, das ich gefunden habe, ist dieses Snippet, das das WWW aus der URL entfernt, ohne die Domain fest zu codieren. Gibt es eine Möglichkeit, diese Methode für meine Frage Nr. 1 zu verwenden?
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]
Aktualisieren:
Mir sind Lösungen bekannt, die ein Bild mit Wasserzeichen anstelle des normalen liefern. Aber ich suche nicht nach einer solchen Lösung. Ich möchte eine universelle Lösung (dienen 403 Fehler), die für alle Arten von Binärdateien (zip, exe, iso, jpg, png, gif ...) funktioniert.
Antworten:
Unabhängig davon, was Sie tun, werden Sie CPU-Zyklen "verschwenden" (um festzustellen, ob die Referrer-Site (die die Verknüpfung ausführt) autorisiert ist oder nicht, müssen Sie die Anforderungsdaten verarbeiten).
Sie können nur Bandbreite sparen und gleichzeitig ein Minimum an CPU-Zyklen verschwenden .
Es gibt einige Beispiele in den Apache-Dokumenten , die genau das tun, was Sie wollen. Dieses:
scheint am besten geeignet zu sein (und erfordert nicht das volle Gewicht von mod_rewrite).
Sie können zusätzliche gültige Verweise mit zusätzlichen
SetEnvIf
undAllow
Direktiven hinzufügen .quelle
%{HTTP_HOST}
für weniger Regex-Analyse) verwenden, um den Host der URL in Ihren Regelsatz einzufügen, wodurch Sie dynamische lokale Domänen erhalten sollten (ausgiebig testen), aber Sie müssten immer noch hart arbeiten -code "nette" externe Referrer wie Google (nach Referrer, User Agent, IP usw.)Wie wäre es, wenn Sie eine Regel schreiben, die, wenn der Referer unbekannt (verboten) ist, einfach eine PHP-Datei aufruft, in der Sie das Bild als Parameter übergeben, und in der PHP-Datei einfach rot einfügt: "Diese Datei stammt von MYWEBSITE.COM und hat keine offizielle Berechtigung, hier gezeigt zu werden ".
Machen Sie Ihre Regel für Ihre Frage global. Korrigieren Sie mich, wenn ich falsch liege , aber wenn die Regel vor einem vhost deklariert wird, wird sie auf alle vhost angewendet (eine Art "Standardregel").
Und eine andere Idee ist einfach: Leiten Sie einfach zu einer PHP-Datei (hier
filter.php
) um, die auf der autorisierten Website angezeigt wird, und geben Sie die erforderliche Datei zurück, wenn alles in Ordnung ist:In
filter.php
nur Last dynamisch eine Liste von vHost oder so ähnlich:quelle
Cloudflare kann Ihnen hilfreich sein: http://www.cloudflare.com
Dies funktioniert jedoch nur für Bilder, aber das scheint das zu sein, wonach Sie suchen.
Hotlink-Schutz
Aktivieren Sie automatisch den Hotlink-Schutz für Ihre Bilder, um eine externe Verknüpfung zu verhindern. Referenten, die sich nicht in der Zone befinden und nicht leer sind, wird der Zugriff verweigert. Unterstützte Dateierweiterungen sind gif, ico, jpg, jpeg und png.
Geschützt: http://mydomain.com/images/pic.jpg Umgehen: http://mydomain.com/images/hotlink-ok/pic.jpg
quelle
Frage 1:
Frage 2:
Frage 3
quelle
Oder verwenden Sie CoralCDN und lassen Sie die Leute nach Herzenslust einen Hotlink erstellen?
quelle