it-swarm.com.de

Wie kann man Hotlinking mit htaccess in Wordpress verhindern und warum funktioniert die häufigste Verwendung nicht?

Ich habe mit dieser .htaccess-Konfiguration begonnen:

Options -Indexes
<files wp-config.php>
order allow,deny
deny from all
</files>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

# END WordPress

um die Website durch Hotlinking vor Diebstahl zu schützen, habe ich nach der besten Lösung gesucht und den folgenden Code am Ende des Codes hinzugefügt:

RewriteEngine on
RewriteCond %{REQUEST_URI} !hotlinking\.png$
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mywebsite\.com [NC]
RewriteRule \.(jpe?g|png|gif)$ /hotlinking.png [NC,L]

Der obige Code ist die gebräuchlichste Lösung, um Hotlinking zu verhindern. Er ist sehr klar, funktioniert aber nicht: Wenn ich zum Beispiel die URL eines Bildes einfüge

https://www.mywebsite.com/wp-content/uploads/sites/2/2018/01/imagexample.jpg

der Browser zeigt das Bild.

Gibt es einen Fehler im Code oder gibt es eine bessere Lösung?

3
Rox

wenn ich die URL des Bildes einfüge

Ich nehme an, Sie meinen, wenn Sie die URL direkt in die Adressleiste des Browsers einfügen, da ich nicht glauben kann, dass Sie sie an einer anderen Stelle einfügen würden. (?)

Wenn dies der Fall ist, ist das Verhalten, das Sie sehen, korrekt - der Browser sollte das Bild anzeigen. Dies ist nicht wirklich "Hotlinking", dies ist eine direkte Anfrage. Sie können direkte Anfragen nicht realistisch blockieren (wenn der HTTP-Referer leer ist), da Sie diese Bilder für echte Benutzer Ihrer Site blockieren könnten, die den HTTP-Referer-Header nicht als Teil der Anfrage senden.

Die folgende Bedingung ermöglicht die Ausführung dieser Anforderung:

RewriteCond %{HTTP_REFERER} !^$

dh Wenn der HTTP_REFERER nicht leer ist.


ASIDE: Sie haben Ihre Frage mit "Multisite" markiert. Offenbar enthält Ihre .htaccess-Datei jedoch beide Codesätze: Standard-Single-Site- und Multi-Site-Code? Der Single-Site-Code steht an erster Stelle, das ist also, was "gewinnt".

2
MrWhite