Wer z. B. einen Mitgliederbereich auf seiner Webseite anbietet oder nicht möchte das Bilder mittels URL direkt auf anderen Webseiten eingebunden werden können, hat verschiedene Möglichkeiten die Inhalte vor Nicht-Mitgliedern zu schützen. Wenn man klassisch mit einer .htaccess– und .htpasswd-Datei arbeitet, schützt man mit den richtigen Einstellungen tatsächlich alle Dateien vor einem Zugriff durch Personen ohne Logindaten.
Allerdings handelt es sich dabei um eine mittlerweile altertümlich wirkende Login-Möglichkeit. Bei dieser hat man auch keine Möglichkeit zur weiteren Gestaltung des Logins hat. Es wird eine solche proprietäre Anmeldemaske des Browser gezeigt:
Alternative zu .htaccess für Login?
Mit Plugins wie DigiMember in WordPress oder auch mit selbst gebauten Member-Bereichen, z. B. in PHP, hat man längst die Möglichkeit eine schönere Login-Maske zu nutzen. Ebenfalls kann man auf diese Weise auch Funktionen wie „Passwort vergessen“ oder überhaupt die Möglichkeit zur Änderung des Passworts für den Endanwender anbieten.
Allerdings hat man ein großes Manko, wenn man sich für die selbst erstellte Variante des Mitgliederbereichs entscheidet oder ein entsprechendes Plugin für WordPress benutzt. Die Inhalte des Mitgliederbereichs, bzw. die Dateien auf dem Server/Webspace, lassen sich auf diese Weise nicht verstecken und vor Zugriff von Nicht-Mitgliedern schützen. Zumindest gilt dies für Dateien wie Bilder (oder html-Dokumente, PDFs) die vom Endnutzer direkt aufgerufen werden müssen.
Werden die Texte aus der Datenbank geladen, wie bei WordPress, sind diese natürlich sicher. Für eingebundene Bilder/Fotos oder zum Download angebotene Dateien gilt dies allerdings nicht! Über die direkte URL wären die Bilder bzw. anderen Dateien auch so im Browser aufrufbar:
Den Ordner auf dem Webspace sollte man nicht zusätzlich per .htaccess verstecken, da der Browser ohne einen Login dann nicht an die Dateien herankommt. Oder Bilder müssten z. B. per PHP oder JavaScript geladen und ausgegeben werden.
Lösung um die Bilder bzw. Dateien trotzdem zu schützen
Es gibt eine einfache Möglichkeit, zumindest beim Apache, die Dateien trotzdem per .htaccess-Datei zu schützen. Hierzu muss man folgendes in der .htaccess-Datei einbauen und an den betroffenen Ordner und die zu schützenden Dateitypen anpassen:
1 2 3 4 5 6 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} /path-to-protect/ [NC] RewriteCond %{HTTP_REFERER} !^https://www.deine-domain.de [NC] RewriteRule .jpg / [R=301] </IfModule> |
Für eine WordPress-Seite, die standardmäßig eingerichtet ist, sollte es wie folgt möglich sein:
1 2 3 4 5 6 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} /wp-content/uploads/ [NC] RewriteCond %{HTTP_REFERER} !^https://www.deine-domain.de [NC] RewriteRule .jpg / [R=301] </IfModule> |
Wenn man mehrere Dateitypen schützen möchte, kann man dies wie folgt erweitern:
1 |
RewriteRule \.(gif|jpg|png|pdf)$ / [R=301] |
Wie funktioniert die .htaccess-Anpassung?
- Durch „RewriteCond %{REQUEST_URI} /path-to-protect/ [NC]“ legt man den Pfad fest, für den die folgenden Anweisungen gelten.
- Mittels „RewriteCond %{HTTP_REFERER} !^https://www.deine-domain.de [NC]“ weist man den Apache an, alle anderen Referrer außer der eigenen Domain, also andere auf die Datei „Verweisende“, mit der dann folgenden RewriteRule abzuhandeln.
- Mit dem letzten Befehl „RewriteRule .jpg / [R=301]“ leitet man schließlich alle Anfragen für JPG-Dateien in dem Ordner auf die Hauptseite um. Hier könnte man natürlich auch eine andere Seite, z. B. eine Werbeseite für den Mitgliederbereich, angeben.
Wenn die Bilder im Mitgliederbereich eingebunden sind funktioniert der Aufruf und die Anzeige der Bilder auch weiterhin, da die Anfrage hierfür von der eigenen Domain (dem noch zugelassenen Referrer) kommt!
Achtung: Hierdurch findet natürlich auch Google diese Dateien nicht mehr! Im Fall des Mitgliederbereichs sollte dies aber wohl auch gewünscht sein. Dadurch tauchen Bilder aus dem Mitgliederbereich nicht in den Ergebnissen von Suchmaschinen auf. Auch das unerwünschte Einbinden der Bilder in andere Webseiten verhindert man so und es gibt keinen „Traffic-Klau“. Allerdings ist dies kein hundertprozentiger Schutz, da es leider auch Referrer-Spoofing gibt, wodurch ein falscher Referrer vorgegaukelt wird!
Hallo Tobias,
vielen Dank für den Beitrag. Ich habe deine Lösung ausprobiert. Leider verhält sich das Ganze sehr merkwürdig. Mal werden die Bilder einzeln (ohne HTML) geladen, dann wieder nicht (404). Es geht um eine WordPress-Seite. Erst wenn ich den Cache mehrmals leere wird das Bild nicht mehr angezeigt, allerdings auch nicht immer! Hast du eine Erklärung dafür? Ich dachte es liegt vielleicht am Caching-Tool WP Rocket, aber deaktiviere ich das verhält es sich nicht anders.
Liebe Grüsse
Hallo Tanja,
danke für dein Feedback. Das klingt in der Tat sehr merkwürdig. Ich würde das auf jeden Fall immer in einem Inkognito-Fenster testen. Wohin hast du die Bilder denn umgeleitet? Zu einem 404-Error sollte es bei einem 301-Redirect ja schon nicht kommen. Das irritiert mich grad etwas.
Viele Grüße
Tobias