Du verwendest einen Internet Explorer in einer Version kleiner gleich 8. Dieser Browser wird nicht unterstützt. Bitte aktualisiere mindestens auf Version 9.
Patrick Saar - Artikel

Artikel

Patrick Saar

WP-Login zusätzlich schützen

In den folgenden Abschnitten stelle ich drei Möglichkeiten vor den Login zum Wordpress-Backend zusätzlich zu schützen. Die erste Möglichkeit beschäftigt sich mit dem Schutz durch IP-Adressen-Sperrung. Weiter geht es mit zusätzlichem Passwortschutz per .htaccess und zum Schluss ein Schutz durch PHP.
Wordpress Logo

Seit dem Relaunch meiner Webseite setze ich auf Wordpress als Content Management Lösung. Da Wordpress Open-Source ist und somit jeder den Quellcode einsehen kann, habe ich bei der Verwendung sehr auf Sicherheitsaspekte geachtet. Der Zugriff auf das Backend der Webseite sollte neben dem Zugriff auf die Datenbank und den Webserver am besten geschützt sein. Fangen wir mit der ersten Möglichkeit an unseren Login-Bereich zusätzlich zu schützen

1. Schutz durch IP-Adressen-Sperrung

Per .htaccess-Datei lassen sich IP-Adressen aussperren. Im Wordpress-Wurzel-Verzeichnis eine Datei namens .htaccess per Texteditor speichern, falls noch nicht vorhanden. Mit den folgenden Zeilen sagen wir dem Webserver, dass er alle Anfragen auf die Datei wp-login.php verweigern soll. Einzig Anfragen vom Client mit der IP-Adresse 192.168.1.0 werden zugelassen. 192.168.1.0 muss durch die eigene IP-Adresse ersetzt werden. Die eigene IP-Adresse kann man z.B. auf www.wieistmeineip.de herausfinden. Weitere IP-Adressen können jeweils in einer neuen Zeile mit Allow from hinterlegt werden.

<FilesMatch "wp-login\.php">
order deny,allow
Deny from all
Allow from 192.168.1.0
</FilesMatch>

Vorteil

  • relativ sicher

Nachteil

  • Die Liste der freigeschalteten IP-Adressen muss bei dynamischen IP-Adressen oder Standortwechseln immer in der .htaccess-Datei erweitert werden.

2. Schutz durch .htaccess Passwortabfrage

Für den Schutz der wp-login.php brauchen wir zwei Dateien. Einmal die .htaccess und einmal eine Datei namens .htusers. In die .htaccess kommt folgender Code, der die zu schützende Datei angibt und die .htusers referenziert.

AddDefaultCharset UTF-8
AuthType Basic
AuthName "Restricted Directory"
AuthUserFile /root/wp/.htusers
# /root/wp durch Dein Wordpress Rootverzeichnis ersetzen.

<FilesMatch "wp-login\.php">
require valid-user 
</FilesMatch>

Die .htusers Datei enthält den Benutzernamen getrennt durch einen Doppelpunkt vom Passwort. Das Passwort wird als Hash-String abgespeichert. Die PHP Funktion crypt() erzeugt einen solchen Hash-String aus dem Passwort im Klartext. Mit meinem Hash Generator kann man sich ganz bequem diesen verschlüsselten String generieren lassen. Sollen weitere Benutzer Zugriff auf den Login-Bereich bekommen, dann sind die weiteren Benutzer mit ihren Passwörter jeweils in einer neuen Zeile in der .htusers anzufügen.

Beispiel einer .htusers Datei:

user:$1$asWIC2aO$ddHVzFRobCru4d7G2QmHw0

Vorteil

  • sicher

Nachteil

  • Eine weitere Benutzername- und Passworteingabe vor der eigentlichen Anmeldung kann bei häufigen Anmeldungen lästig werden.

3. Schutz durch PHP

Die letzte der vorgestellten Möglichkeiten basiert auf einer Erweiterung des Codes der wp-login.php Datei. Durch PHP-Code, den wir am Anfang in die Datei wp-login.php durch einen Server-Side-Include einfügen, kann der Login vor unbefugtem Zugriff geschützt werden.

include( dirname(__FILE__) . '/key.php' );

Die Datei key.php wird im Wurzelverzeichnis der Wordpress-Inatallation abgelegt und enthält folgenden Code.

$__KEY = 'mein-key'; // hier Deinen Schlüssel eingeben

$hash = hash('sha256', $__KEY);
$myGET = array();
foreach ($_GET as $key => $val) {
    if ($key !== 'key')
        $myGET[$key] = $val;
}
if (empty($myGET)) {
    if ($_GET['key'] != $__KEY) {
        header('Location: /');
    } else {
        if (!isset($_COOKIE['key'])) {
            setcookie('key', $hash, time() + 86400, '/');
        }
    }
}
if (!empty($myGET) && $_COOKIE['key'] != $hash) {
    header('Location: /');
}
if (isset($_GET['loggedout']) && $_GET['loggedout'] == 'true' && isset($_COOKIE['key'])) {
    setcookie('key', $hash, 0, '/');
}

PHP leitet alle Anfragen von wp-login.php ohne angehängten Schlüssel auf die Startseite der Webseite weiter. Ein Zugriff auf wp-login ist nur noch durch den Aufruf http://www.domain.de/wp-login.php?key=mein-key oder http://www.domain.de/wp-admin.php?key=mein-key möglich. Damit auch der Logout-Vorgang funktioniert wird beim erfolgreichen Aufruf von wp-login ein Cookie mit dem Key als SHA256-String gespeichert. Dieses wird nach Abschluss des Logout-Vorgangs wieder zerstört.

Vorteil

  • Der Link zum wp-login kann mit dem Schlüssel als Lesezeichen im Browser gespeichert werden.

Nachteil

  • Ein Login in das WP-Backend über http://www.domain.de/admin ist nicht mehr möglich.
  • Die Änderungen können bei Updates von Wordpress überschrieben werden.
Diese Seite verwendet Cookies um die beste Nutzerfreundlichkeit zu bieten. Falls Du auf der Seite weitersurfst, stimmst Du der Cookie-Nutzung zu.
Details Ok