Der Zugang zum Adminbereich von WordPress ist einer der sensibelsten Punkte bei der Absicherung einer WordPress-Seite. Wer es schafft sich als Adminstrator einzuloggen, hat vollen Zugriff auf die Installation und kann sie nach belieben verändern. Deshalb sollte nicht nur der Benutzername und das Passwort sorgfältig gewählt, sondern auch geprüft werden, ob ein zusätzlicher Schutz über den Server mit BasicAuth mit Hilfe der Datei .htaccess eingesetzt werden kann. Dabei wird der Login zu WordPress zusätzlich mit einem eigenen Benutzernamen und Passwort auf dem Server geschützt. Die hier beschriebene Vorgehensweise ist für Apache-Server. Wer auf einem Nginx-Server arbeitet, findet gute Beschreibungen bei Martin Herbst und Willy’s Technik-Blog.

Auf einem Apache-Server sieht das dann je nach verwendetem Browser z.B. so aus:
Abfragefenster BasicAuthErst nachdem man sich in diesem Fenster authentifziert hat, gelangt man zum eigentlichen WordPress-Login. Der Zugriff auf das Admin-Panel ist damit nicht nur doppelt gesichert, sondern es hat auch den Vorteil, dass bei einem Angriff weniger Ressourcen verbraucht werden, da der Angreifer zunächst nur auf dem Server landet und keine Abfragen in der eigentlichen WordPress-Installation auslösen kann.

Sollen sich die Besucher jedoch in die Seite einloggen können, weil z.B. ein Forum betrieben wird oder sehr viele Redakteure oder Autoren im Admin-Bereich arbeiten, ist der Administrationsaufwand für einen solchen Schutz deutlich höher, da entweder manuell für jeden Benutzer ein individueller Serverschutz eingerichtet werden muss oder man sogenannte Gruppenberechtigungen erstellt. Bei Letzterm stellt sich dann irgendwann die Frage, wie sicher so ein Schutz dann noch ist, wenn viele Beteiligte die zusätzlichen Zugangsdaten kennen.

Um diesen Schutz zu implementieren, benötigen wir zwei Dateien auf dem Server:

  • eine .htpasswd, in der die Zugangsdaten gespeichert sind und
  • eine .htaccess, in der der Befehl zum Aufrufen von BasicAuth hinterlegt ist.

1) .htpasswd erstellen

In der Datei .htpasswd wird der Benutzername und das Passwort für die Server-Authentifizierung verschlüsselt hinterlegt. Diese sollten selbstverständlich anders lauten, als die Zugangsdaten zum eigentlichen WordPress und ebenfalls sicher sein. Die Verschlüsselung kann man z.B. auf diesen Seiten .htpasswd Generator oder Htpasswd Generator erstellen. Auf .htpasswd Generator kann dabei die Verschlüsselungsmethode gewählt werden. Die MD5 Verschlüsselung ist stärker und kann bei den meisten Apache Webservern verwendet werden.
Nachdem man Benutzernamen und Passwort eingegeben hat, lässt man über den entsprechenden Button den verschlüsselten Code erstellen. Nun öffnet man einen normalen Editor (Windows Editor, Notepad++, EmEditor u.ä.), kopiert den Code hinein und speichert die Datei als .htpasswd.txt oder htpasswd (ohne Punkt davor). Die Endung .txt wird in der Regel bei Windows benötigt, da die Editoren in der Regel den Dateinamen .htpasswd nicht akzeptieren. Manche Webmaster fügen eine Reihe von Zufallszeichen an den Dateinamen an, z.B. .htpasswd.6BzYzbsR7xI47W8D und machen sie damit für Angreifer noch schwerer identifizierbar. Dann lässt sich die Datei z.B. mit Notepad++ auch direkt speichern und ein späteres entfernen der Endung .txt ist nicht notwendig.
.htpasswd erstellenUm die .htpasswd-Dateien später leichter zuordnen zu können, ist es hilfreich, in der Datei zu hinterlegen, für welche Datei bzw. welches Verzeichnis es gilt. Die fertige Datei sieht dann z.B. so aus:

# /home/user/www/domain.ch/wp-login.php
gewünschterName:$1$tdalXACx$3IKNQrOr4JQM49btVKK6Z/

Der Text nach der # ist dabei eine frei wählbare Beschreibung. Diese Datei wird nun auf den Webspace hochgeladen. Dies kann in das Hauptverzeichnis der WordPress-Installation erfolgen, im Screenshot z.B. auf www/WordPress oder man wählt den noch sichereren Weg und speichert die Datei eine Ebene höher in einem eigenen Verzeichnis, wie z.B. .htpasswds. Serververzeichnis .htpasswdsHier ist sie vor fremden Zugriffen noch besser geschützt, weil ein potentieller Angreifer, den Verzeichnisnamen nicht kennt und in der Regel von außen nicht auf die Verzeichnisse in dieser Ebene zugreifen kann.
Falls die Datei als .htaccess.txt oder htaccess hochgeladen wurde, muss sie nun auf dem Server in .htpassword umbenannt werden.
Jetzt müssen wir noch in der .htaccess hinterlegen, das der Zugriff durch BasicAuth geschützt wird und wo die Zugangsdaten zu finden sind.

2) .htaccess erstellen bzw. ergänzen

Falls noch keine .htaccess im Hauptverzeichnis der WordPress-Installation vorhanden ist, muss sie mit einem normalen Editor (Windows Editor, Notepad++, EmEditor u.ä.) zunächst als .htaccess.txt erstellt werden. Wenn im WordPress jedoch die Permalinks aktiviert sind, exitiert diese Datei bereits. In diesem Fall laden wir sie vom Server herunter und bearbeiten sie.

In der .htaccess muss folgender Code eingefügt werden:

<Files wp-login.php>
  AuthName "Adminbereich"
  AuthType Basic
  AuthUserFile /absoluter/Pfad/zu/.htpasswd.Zufallszeichen
  require valid-user
</Files>

Der Text “Adminbereich” wird im Authentifzierungs-Fenster angezeigt und ist frei wählbar, siehe Screenshot ganz oben. Ganz wichtig ist der korrekte absolute Pfad zur .htpasswd auf dem Server. Falls man den nicht weiß, kann man den absoluten Pfad mit einem PHP-Script ermitteln.
Falls die .htpasswd wie oben beschrieben in einem Verzeichnis liegt, das nicht direkt aufzurufen ist, kann man zunächst den absoluten Pfad der WordPress-Installation ermitteln, z.B.
/home/kunde124/www/domain.ch
und dann z.B. mit FileZilla auf dem Server nachschauen, wie die Ordnerstruktur aufgebaut ist und den Pfad entsprechend anpassen, z.B.:
/home/kunde124/.htpasswds/htpasswd.Zufallszeichen

Als Variante oder Ergänzung zu der beschriebenen Authentifizierung wird teilweise empfohlen, das ganze Verzeichnis wp-admin zu schützen. Allerdings soll dies bei einigen Plugins zu Problemen führen. Auch kann es zu Problemen mit AJAX-Aufrufen kommen.
Wer diese Art von Schutz nutzen möchte, erstellt eine eigene .htaccess im Ordner wp-admin in der folgender Code eingetragen ist:

AuthType Basic
AuthName Adminbereich
AuthUserFile /absoluter/Pfad/zu/.htpasswd.Zufallszeichen
require valid-user

Es sind dieselben Hinweise wie beim Erstellen bzw. Anpassen der .htaccess zum Schutz der wp-login.php zu beachten.

Schutzmaßnahmen um unerwünschte Zugriffe und das Aufrufen der Dateien zu verhindern

Egal für welche Variante von Serverschutz man sich entscheidet, es sollten sicherheitshalber noch weitere Maßnahmen getroffen werden:

Dateizugriffsrechte anpassen

Idealerweise sollten die beiden Dateien nur vom Besitzer gelesen werden, also die Dateirechte 400 haben. Leider funktioniert das nicht bei allen Hostern. Deshalb muss ausprobiert werden, welche Leserechte erforderlich sind, damit die Seite weiterhin funktioniert. Hierzu klickt man z.B. über FileZilla die entsprechende Datei mit der rechten Maustaste an und wählt den Menüpunkt Dateiberechtigungen. Nun kann man die entsprechenden Rechte auswählen und testen. Nach meiner Erfahrungen wird meist doch 644 benötigt.
Dateiberechtigungen

Aufruf von Dateien verhindern

Zusätzlich sollte der Aufruf der beiden Dateien bereits vom Server verhindert werden. Bei dieser Gelegenheit können gleich weitere Dateien für den Aufruf gesperrt werden, wenn folgender Code in der .htaccess eingefügt wird:

<FilesMatch "(.htaccess|.htpasswd|wp-config.php|liesmich.html|readme.html)">
  order deny,allow
  deny from all
</FilesMatch>

Damit sind die einzelnen Schritte zum Absichern des Zugriffs auf das Admin-Panel von WordPress beschrieben. Was sind Eure Erfahrungen? Wo geht Ihr evtl. anders vor?


Teile diesen Inhalt mit deinen Freunden: