Private WordPress-Website mit Registrierung

PabstWP Beitragsbild WordPress Sicherheit

Vladimir erklärte gestern in seinem Artikel WordPress als privates Fotoalbum, wie er WordPress nutzt, um Fotos mit Familie und Freunden zu teilen ohne sie der Öffentlichkeit zugänglich zu machen. Er setzt dabei auf serverseitigen Passwortschutz via .htaccess.

Ich nutze WordPress ebenfalls, um private Fotos mit Familie und Freunden zu teilen, habe jedoch einen etwas anderen Ansatz, den ich hier kurz erläutern möchte.

Ziel

Ich möchte eine WordPress-Website, die nur berechtigte Personen, also meine Freunde und meine Familie sehen dürfen. Meine Besucher sollen sich hierfür selbst registrieren und ihre Profildaten wie Name und Passwort verwalten dürfen. Die Freischaltung der Registrierung erfolgt manuell durch mich. Des Weiteren möchte ich alle RSS-Feeds deaktivieren, da diese sich natürlich nicht durch ein Passwort schützen lassen und von Suchmaschinen gelesen werden können.

Lösung

Folgende 2 WordPress-Plugins nutze ich, um den Blog vor neugierigen Blicken abzuschotten und für meine Besucher zu optimieren:

  • Absolute Privacy: Dieses Plugin macht die komplette Website nur registrierten Benutzern zugänglich und wickelt die Registrierungsprozedur ab (Nachricht an Admin, Bestätigung an Besucher nach Freigabe usw.) Außerdem lässt sich mit diesem Plugin der RSS-Feed deaktivieren.
  • Peter’s Login Redirect: Mit diesem Plugin lässt sich festlegen, welche Benutzer oder Benutzergruppen nach dem Login auf welche Seite weitergeleitet werden sollen. Sinnvoll ist, Besucher nach dem Login direkt auf die Startseite weiterzuleiten statt ihnen das (leere) Dashboard anzuzeigen.

Erweiterung

Als zusätzliche Maßnahme empfiehlt es sich, zu verhindern, dass hochgeladene Dateien über den Direktlink (z.B. domain.de/wp-content/uploads/datei-xyz.jpg) von einem nicht autorisierten Benutzer aufgerufen oder gar in einer anderen Website eingebettet werden können (sog. Hotlinking). Alle hochgeladenen Dateien sind nämlich nach Einrichtung der o.g. Plugins weiterhin verfügbar, nur Beiträge und Seiten sind geschützt! Es ist zwar unwahrscheinlich, dass ein Dateiname von einem nicht angemeldeten Benutzer erraten wird, aber ist ja durchaus denkbar, dass ein angemeldeter Benutzer einen Link an jemanden weitergibt, der keinen Zugriff haben soll.

Folgende Maßnahme schafft Abhilfe: .htaccess erweitern und neue Datei „dl-file.php“ im Wurzelverzeichnis des Blogs ablegen. Hier der Code:

Erweiterung .htaccess:

Datei dl-file.php

Nach der Erweiterung testen! Einfach den Link zu einer Datei in die Zwischenablage kopieren, von WordPress abmelden und die Datei aufrufen. Es darf nur eine leere Seite mit dem Link angezeigt werden!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit * markiert.

Bitte benutze Pastie.org oder Pastebin.com, um Code in Deinem Kommentar zu veröffentlichen.

*

38 Kommentare

  1. Dieses Script wäre genau, was ich gesucht habe…
    Für eine Intranet-Seite habe ich das Plugin „Authenticator“ benutzt, um die ganze Seite zu sperren. Nun bräuchte ich aber noch etwas, dass die Bilder und Dateien vor Direktzugriff schützt.
    Leider aber habe ich das Problem von Irina, dass alle Bilder plötzlich nicht mehr angezeigt werden. Auch im Backend in der Medien-Übersicht erscheinen nur so „kaputte“ Bildsymbole.
    Das ganze passiert mir bei der Lokalen Installation (mit MAMP) als auch online.
    Wäre total froh um Hilfe. Herzlichen Dank auf jedenfalls für das Script.

      1. Vielen Dank für die schnelle Antwort.
        Hab unterdessen herausgefunden, dass es an meinem Theme, genauer an der functions.php liegt. Als ich das ?> am Ende weglöschte, funktionierte es doch auf einmal, wie es sollte. Hoffe, dies bleibt nun auch so.
        Nochmals ein herzliches Merci und liebe Grüsse!

        1. Ich habe jetzt die .htaccess gelöscht und durch die ersetzt, die ich mir direkt nach Aufspielen von WordPress runtergeladen hatte, da den Codeschnippsel an die glcieh Stelle wie vorher auch immer eingefügt und… es klappt. Warum auch immer, aber Hauptsache, es geht nun :-)!

  2. Hallo, danke für den super Beitrag, hat mir in Teilen schon sehr geholfen!
    Folgendes Problem habe ich aber, wenn ich die .htaccess erweitere und die php-Datei erstelle: es ist alles gesperrt, sodass ich mich auch nicht mehr einloggen kann… 🙁 wenn ich die Änderung in der .htaccess rückgängig mache, klappt alles wieder, aber dann sind eben auch die Dateien sichtbar. Was mache ich falsch?

    1. Nun hatte ich gerade eine Umgehung für den Fehler gefunden, da taucht ein anderer auf: alle Bilder etc., die ich in meiner Seite eingebunden habe, sind nicht mehr sichtbar, auch nicht im eingeloggten Zustand, d.h. es zerhaut mir alles.

      1. Schade, dass es bei dir nicht funktioniert. Ich habe es gerade noch einmal getestet mit WordPress 4.5.1 auf Apache Webserver mit PHP 5.6 und es funktioniert problemlos. Hast du außer dem Standard-Rewrite von WordPress noch etwas anderes in deiner .htaccess stehen?

        1. nicht, dass ich wüsste, habe die Datei sonst nicht verändert. aber vielleicht habe ich es einfach an der falschen Stelle eingefügt?!

        2. Die Position ist eigentlich egal. Am Besten vor den WordPress-Rewrite-Rules.
          Gibt es evtl. Sicherheits-Plugins, die die Ausführung des Skripts verhindern könnten? Und ist in den Logfiles beim Webhoster etwas ersichtlich?

  3. Vielen Dank für das tolle Tutorial. Leider habe ich ein Problem das ich bisher nicht lösen konnte. Dateien die größer als 14 MB sind, kann ich nicht downloaden wenn sie sich im Upload-Ordner befinden. Außerhalb des Upload-Ordners funktioniert es. Auch wenn ich die „dl-file.php“ entferne, kann ich wieder eine große Datei herunterladen ohne das der Download bei 14 MB stoppt.
    Woran könnte das liegen? Würde mich sehr über eine Rückmeldung freuen.

    1. Dass der Download außerhalb des uploads-Verzeichnisses funktioniert, ist klar. Siehe .htaccess RewriteRule. Warum er aber im uploads-Verzeichnis bei 14 MB stoppt, kann ich nicht sagen. Tut mir leid.

      1. Vielen Dank für die schnelle Antwort. Eine letzte Frage hätte ich noch dazu. Ist der Download aus dem Upload-Ordner immer auf Dateien beschränkt die kleiner als 14 MB sind oder tritt das Problem bei Ihnen nicht auf?
        Mit besten Grüßen
        Stefan

  4. Ich habe bei mir die .htaccess eingebaut und die dl-file.php.
    Wenn ich nicht eingeloggt bin passt es, jedoch bekomme ich wenn ich angemeldet bin nur einen buchstabensalat mit lauter fragezeichen. Ist es wichtig in welcher codierung die php datei vorliegt?

  5. Hi,

    ich habe gerade versucht meine Mediendaten damit zu schützen. Leider ist es immer noch möglich ohne Anmeldung die Daten einzusehen. Muss ich noch Anpassung vornehmen?
    Die dl-file.php liegt im gleichen Verzeichnis wo auch die cgi-x Ordner zu finden sind und die .htaccess auch, bzw. ich habe sie auch schon in diversen anderen Ordner zum Testen kopiert.

    1. Die dl-file.php gehört in das oberste Verzeichnis der WordPress-Installation und die dort vorhandene Datei .htaccess muss erweitert werden. In diesem Verzeichnis liegt z.B. auch die Datei wp-config.php. Falls das Skript bei dir nicht funktioniert, kann das ggf. an der Konfiguration des Webservers liegen.

  6. Herzlichen Dank für diesen Artikel – die Sache mit dem direkten Dateiaufruf ohne eingeloggt zu sein liegt mir schon seit langem an Herzen. Allerdings komme ich mit der Lösung in der obigen Form nicht weiter, da ich ein Multiuser-Wordpress habe mit ca. einem Dutzend Blogs. EIN Blog davon ist komplett nur für registrierte Benutzer, und ich möchte gerne den Upload-Ordner dieses Blogs sperren.

    Meine RewriteRules, die ich probiert habe lauten wie folgt:

    # Direktzugriff auf Uploadmedien nur für eingeloggte User erlauben
    RewriteCond %{REQUEST_FILENAME} -s
    RewriteRule ^wp-content/uploads/(.*)$ dl-file.php?file=$1 [QSA,L]
    RewriteRule ^wp-content/blogs.dir/4/files/(.*)$ dl-file.php?file=$1 [QSA,L]
    RewriteRule ^files/(.*)$ dl-file.php?file=$1 [QSA,L]

    Keine davon funktioniert allerdings. Wenn da jemand ein Idee hat, wie ich das hinbekomme… 😀

      1. Irgendwie komm‘ ich da nicht weiter, leider.
        Wir haben uns aber letzte Woche dazu entschlossen, unsere Multiuser-Installation nach und nach zu entschlacken, d.h. einzelne Blogs rausziehen und als Einzelinstallation zu betreiben. Damit dürfte dann auch der oben beschriebene Zugriffsschutz implementierbar sein …

        1. So, der fragliche Blog läuft jetzt als Single-Instanz – und der Schutz mit dl-file.php hat auf Anhieb funktioniert.
          Nochmal herzlichen Dank!

  7. Hmm… was ich eher will, ist nicht eine gesamte Webseite sperren, sondern nur eine bestimmte Seite. D.h. normale Besucher können schon die Startseiete etc. sehen, aber nicht eine bestimmte Seite.

    Dafür müssen sie sich registrieren. Irgendein Tipp?

    1. Kein Tip mit Registrierung, aber evtl. eine Überlegung Wert:
      Den betreffenden Beitrag einfach als Paßwortgeschützt markieren.
      Pwd kann man auf Mail-Anforderung rausgeben, gegen Mißbrauch und Weitergabe schützt dann gelegentliche PW-Änderung…

  8. Danke für den Tipp, da ich genau solch ein Fall gerade auch habe. Ich habe mich für „Absolute Privacy“ entschieden. Hierzu habe ich nur eine Frage: wenn ich als Admin User anlege, möchte ich eigentlich nur eine Mail mit den Zugangsdaten raussenden, und nicht gleich zwei Mails, dass der User angelegt wurde und dann noch, dass dieser freigegeben ist. Gibt es da eine Möglichkeit, diese Moderate-Prozess zu umgehen? Die User registrieren sich ja nicht selbst, sondern ich mache das für sie.

  9. Hallo! Ich bin Julian und bin großer WordPres Fan. Auf diese Anwendung von WordPRess bin ich noch nicht gekommen, danke für den Tipp. Es hört sich sehr bequem und vor allem selbst kontrollierbar an. Wahrscheinlich eine gute Alternative zu den großen Portlen, die Fotoverwaltung anbieten.
    Grüße,
    Julian