Schützen Sie Uploads in Multisite

Ich benutze WordPress Multisite (3.3.1) und versuche, Uploads von bestimmten Blogs vor Hotlink zu schützen und direkt darauf zuzugreifen. Dies steht in engem Zusammenhang mit dem Schutz von Uploads, wenn der Benutzer nicht angemeldet ist? , aber ich möchte nur, dass die Uploads über Skripte zugänglich sind, die auf dem Server laufen (IE. Der Server alleine kann Uploads anzeigen / bedienen), so dass der Inhalt durch WordPress Benutzerrechte geschützt werden kann.

Zum Beispiel habe ich ein Feld namens 40c.jpg bei localhost / files / 2011/07 / 40c.jpg ; Ich möchte, dass die Datei nur angezeigt wird, wenn sie von HTML in der lokalen Domäne (hier: localhost ) aufgerufen wird. Also nicht auf irgendeiner anderen Seite im WordPress Netzwerk, irgendeiner anderen Domain oder wenn direkt darauf zugegriffen wird (IE. Localhost / files / 2011/07 / 40c.jpg ).

Dies geschieht vorzugsweise mit WP_Rewrite innerhalb von functions.php des Themas für diese Site; Das würde die Auswirkungen auf diese Website leicht begrenzen. Aber die Verwendung der .htaccess in WordPress root ist auch eine praktikable Option, obwohl ich annehme, dass würde bedeuten, dass die Domäne selbst dort angegeben werden müsste (IE. Localhost ).

Irgendwelche Vorschläge, wie dies zu erreichen ist? Ich hatte sehr wenig Glück bei der Suche nach StackExchange, WordPress.org und Google.

Solutions Collecting From Web of "Schützen Sie Uploads in Multisite"

Sie haben einige Probleme in Ihrem zugrunde liegenden Ziel …

Zum Beispiel habe ich ein Feld namens 40c.jpg bei localhost/files/2011/07/40c.jpg

OK, das macht Sinn und ist, wo das Bild an erster Stelle sein sollte.

Ich möchte, dass die Datei nur angezeigt wird, wenn sie von HTML in der lokalen Domäne (hier: localhost) aufgerufen wird. Also nicht auf irgendeiner anderen Seite im WordPress Netzwerk, irgendeiner anderen Domain oder wenn direkt darauf zugegriffen wird (IE. Localhost / files / 2011/07 / 40c.jpg).

Hier hast du ein Problem …

Wenn Sie ein Bild in einem HTML-Block referenzieren, ruft das HTML das Bild nicht auf. Ihr Server gibt den HTML-Code an den Browser, der Browser analysiert ihn und sieht die Bildreferenz, dann geht der Browser wieder aus und fragt Ihren Server nach dem Bild.

Hier ist zum Beispiel die tatsächliche Netzwerkaktivität für Bilder auf meiner eigenen Website: Beispiel Screenshot

Für dieses große Codebild in der Kopfzeile gibt mein Server dieses Markup zurück:

 code 

Mein Browser sieht das und macht eine separate Anfrage für das Bild, lädt das Bild vom Server herunter und rendert es auf dem Bildschirm.

Wenn ich begrenzen möchte, wer dieses Bild laden kann, würde ich auf dem Server einen Code hinzufügen, um die Anfrage abzufangen, den Wert des Referer Headers prüfen und den Inhalt entweder zurückgeben oder nicht.

Diese Handhabung ist 100% außerhalb von WordPress. Nein WP_Rewrite . Keine Plugins. Nichts mit deinem Thema gemacht. Sie könnten Apache dazu bringen, dies mit einer Kombination von Änderungen an .htaccess und httpd.conf zu httpd.conf , aber das ist eine sysadmin-Aufgabe, die über den scope dieser Site hinausgeht.

Es gibt einige Möglichkeiten, dies effektiv zu handhaben. Die meisten davon erfordern die Verwendung eines Plugins oder eines pluginartigen Verhaltens (siehe Hinzufügen von mod_rewrite-Regeln zu htaccess und WP_Rewrite im Codex ). Das Problem liegt wirklich darin, wie WordPress Uploads in einer Umgebung mit mehreren Standorten verarbeitet und wie man eine RewriteRule anwendet, die nur eine bestimmte Site betrifft.

Ein hilfreicher Benutzer in den Foren von WordPress.org schlug vor, Folgendes hinzuzufügen (direkt unter “# uploaded files” in der .htaccess-Datei im WordPress-Stammordner):

 RewriteCond %{HTTP_HOST} ^somedomain\.com RewriteCond %{SCRIPT_FILENAME} ^([_0-9a-zA-Z-]+/)?files/(.+) RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) - [L] 

Wo wäre Somedomain die Domäne, die den direkten Zugriff auf Dateien verbietet ? Außerdem fügen Sie Options All -Indexes und dies:

 # ultimate hotlink protection  RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g?|png)$ [NC] RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?domain\. [NC] RewriteRule \.(gif|jpe?g?|png)$ - [F,NC,L]  

verhindert Verzeichnisverzeichnis und Hotlinking (von Perishable Press ) jeweils.

Hoffentlich wird dies in zukünftigen Versionen von WordPress einfacher gehandhabt (siehe Ticket # 19235: ms-files.php standardmäßig ausschalten ).