Tipps

Mediendateien vor Zugriff schützen

WordPress-Mediendateien vor Zugriff schützen

WordPress bietet von sich aus keinen Zugriffsschutz von Dateien, die Sie in die Mediathek hochgeladen haben. Eine Bild- oder PDF-Datei, die Sie in einem privaten Bereich hochgeladen haben, liegt offen im Web und kann verlinkt oder von Google indexiert werden. Wir zeigen Ihnen eine einfache Lösung, wie Sie Ihre WordPress-Mediendateien der Mediathek schützen und den direkten Zugriff verhindern.

Was ist das Problem?

Dateien, die Sie über eine Seite oder direkt in die Mediathek Ihrer Website hochladen, liegen völlig ungeschützt im Unterverzeichnis /wp-conten/uploads Ihrer WordPress-Website. Kennt jemand den Link, können die Dateien einfach von Ihrem Server heruntergeladen und verbreitet werden. Auch Google hat Zugriff auf die Dateien Ihrer Mediathek und kann sie so in der Suchmaschine auffindbar machen.

Dieser Umstand ist dann problematisch, wenn Sie den Zugriff auf Dateien zum Beispiel in einem Intranet oder einem Mitgliedsbereich nur einer bestimmten Klientel gewähren möchten. Die uns bekannten Erweiterungen, die einen geschlossenen Bereich auf Ihrer Website ermöglichen, schützen regelmäßig nur die textlichen Inhalte der Seiten oder Beiträge, nicht aber die eingebundenen Medien und Dateien vor externen Zugriff. Das gilt natürlich auch für den von WordPress angebotenen Funktionen „Passwort-Schutz“ oder „Privat“.

Einfacher Zugriff-Schutz ohne Plug-in

Wie schon angedeutet, gibt es zwar einige Plug-in-Lösungen (zum Beispiel Download Manager, Prevent Direct Access – Protect WordPress Files oder WP Content Copy Protection), doch nicht selten sind die Lösungen zu komplex oder zu teuer, wenn man zum Beispiel nur einen Datei-Typ vor dem unberechtigten Zugriff schützen möchte.

Für ein Kundenprojekt haben wir uns deshalb auf die Suche nach einer in der Umsetzung und Bedienung einfachen Lösung gemacht und sind auf dem Blog von Jeff Starr und seinem im Beitrag Protect WordPress Media Files veröffentlichten Lösungsansatz, fündig geworden.

Jeff hat eine einfache Methode gefunden, die den Zugriff auf Mediendateien von einem anderen Ort als der Website selbst verhindert. Wir haben den Code für unsere Bedürfnisse auf den Schutz von PDF-Dateien angepasst. Den original-Code finden Sie hier.

Wichtiger Hinweis: Bei dem Code von Jeff handelt es sich um ein Experiment, das auf seiner WordPress-Installation und bei einem Kunden von uns bestens funktioniert. Wir übernehmen aber für den Code keine Haftung: Sie setzen die Lösung auf eigenes Risiko um!

Vor- und Nachteile der Lösung

Es gibt einige Vor- und Nachteile solcher Techniken. Je nach Ihren Bedürfnissen können Vorteile auch zu Nachteilen werden.

Zunächst die Vorteile

  • Schützt PDF vor hotlinking
  • Verhindert direkten PDF-Zugriff (d.h. kein Referrer)
  • Verhindert, dass PDF in den Ergebnissen der Google-Suche angezeigt werden
  • Hilft sicherzustellen, dass PDF-Dateien nur auf Ihrer Website angezeigt werden
  • Super einfach, leicht und schnell

Und die Nachteile

  • Verhindert, dass PDF in den Ergebnissen der Google-Suche angezeigt werden – Der Schutz gilt für alle PDF-Dateien in der WordPress-Mediathek
  • Verhindert direkten PDF-Zugriff (d.h. kein Referrer)
  • Die Lösung ist experimentell und nicht umfassend getestet (Nutzung auf eigene Gefahr!)
  • Es ist möglich, dass böswillige Akteure den Referrer fälschen/spoofing
  • Voraussetzung ist ein Apache-Webserver (das ist allerdings die Regel)

Wie der Code funktioniert

Der Code in Ihrer .htaccess-Datei im Hauptverzeichnis von WordPress prüft zunächst, ob die Anfrage der PDF-Datei für eine Datei innerhalb der Medienbibliothek gilt, insbesondere für eine Datei im Verzeichnis /wp-content/uploads/. Ist das der Fall, prüft der Code, ob der Referrer mit der Domain Ihrer Website übereinstimmt. Wenn dies nicht der Fall ist, stammt die Bildanforderung von einer anderen Website oder anderen Quelle (E-Mail) und wird daher blockiert. Diese einfache Lösung funktioniert, weil die Website, die die Bilder hostet, immer der Referrer für Bildanfragen ist.

Der .htacess-Code

Update im März 2024: Unser Leser Martin Ögg hat berechtigterweise darauf hingewiesen, dass
auf reinen nginx-Servern Einstellungen der .htaccess-Datei keine Wirkung zeigen und der Code damit nicht funktioniert.

Falls nicht schon vorhanden, legen Sie im Hauptverzeichnis Ihrer WordPress-Installation eine .htaccess-Datei an und fügen möglichst direkt oben den folgenden Code ein (Denken Sie in Ihrem eigenen Interesse zunächst an eine Sicherungskopie der Datei):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} /wp-content/uploads/ [NC]
RewriteCond %{HTTP_REFERER} !^https://ihre-domain.de [NC]
RewriteRule .pdf / [R=301]
</IfModule>

Dieser Code schützt alle Dateien mit der Endung .pdf vor externen Zugriff. Falls jemand den Link zum Beispiel per E-Mail an einen Dritten weiterleitet und der Empfänger klickt auf den Link, landet er auf einer 404-Fehler-Seite, falls vorhanden.

Fazit

Wir standen in einem Kundenprojekt vor der Herausforderung, PDF-Datei vor externen Zugriffen zu schützen. Die von Jeff erdachte Lösung, haben wir an unseren Bedarfsfall leicht anpassen können. Sie bietet einen anscheinend perfekten Schutz vor fremdem Zugriff der in einem geschlossenem Bereich angebotenen PDF-Dateien. Und unser Kunde muss keine komplexen Plug-in-Lösungen bezahlen und mühevoll erlernen.

turned_in_notHack/Datenklau, Medien, Tutorials

6 Kommentare. Wir freuen uns über Ihren Kommentar

  • funktioniert bei mir leider nicht….

    Antworten
    • Martin Ögg | SCIAM Digitalmedien
      8. März 2024 19:00

      Vorweg: Vielen Dank für diese tolle Lösung!
      Bei mir hat das Codeschnipsel im ersten Test sofort funktioniert. Als ich es gestern auf einer anderen Seite implementiert habe, wurden die Mediendateien ebenfalls nicht geschützt. Die Ursache lag an einer Einstellung am Webserver: Wenn auf dem Server nginx läuft und in den Einstellung “Statische Dateien direkt durch nginx bedienen” aktiviert ist, dann klappt die Sperre nicht. Offenbar werden dadurch die .htaccess-Einstellungen umgangen.
      Wir verwenden einen Webserver mit PLESK dort konnten wir die Einstellung ganz leicht deaktivieren. Ich weiß nicht, wie das bei den üblichen Hosting-Providern aussieht.
      Vielleicht hilft diese Information.

      Antworten
  • damit nicht ein zufllig vorkommendes pdf in einer datei gefunden wird, z.b.: scanpdf.jpg

    würd ich die RewriteRule regex etwas verfeinern
    RewriteRule \.pdf$ / [R=301]
    somit werden wirklich nur dateien mit endung .pdf gematcht.

    ansonsten super lösung vielen dank!

    Antworten
  • Hallo, danke für IHre kalre Erlätuerung!
    Ich habe ein ähnliches Problem möchte aber nur PDFs in einem bestimmten Ordner schützen. Würde es reichen in der Zeile RewriteCond %{REQUEST_URI} /wp-content/uploads/
    den Ordnernamen anzuführen, um nur diesen Ordner zu schützen und dort alle betreffenden PDFs zu versammeln? Und funktioniert das dann auch für den User der Website oder nur externen Zugriff?
    Wie organisieren Sie dann die 404-Seite? Kann man noch eine spezifische eigene gestalten (nur für diesen Ordner)?

    Hintergrund: einen passwortgeschützten Bereich für PDF-Dateien, die erst nach Passworteingabe einsehbar sind?

    Antworten

Wir freuen uns über Ihren Kommentar!

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fill out this field
Fill out this field
Bitte geben Sie eine gültige E-Mail-Adresse ein.
You need to agree with the terms to proceed

expand_less
Elbnetz GmbH hat 4,96 von 5 Sternen 50 Bewertungen auf ProvenExpert.com