Da ich nun die öffentliche Anmeldung in meinen Blogs abgeschaltet habe, kann ich nun den wp-admin Ordner endlich per htaccess schützen. Das hängt beides zwar nicht unmittelbar zusammen, aber so ist es sehr viel sauberer. Jetzt müsste die wp-login.php nur auch noch in den wp-admin Ordner und alles wäre schön. Da mir das jetzt aber zu kompliziert ist und man es auch bei jeder Aktualisierung wieder neu machen müsste, schütze ich die wp-login.php einfach auch per htaccess. Natürlich kann ich nun nicht einfach eine htaccess in den root Ordner des Blog packen, den das würde ja auch alle Leser aussperren. Was viele Leute nicht wissen ist, das man auch einzelne Dateien mit htaccess schützen kann. Der Webserver muss natürlich htaccess unterstützen. Sollte dies nicht der Fall sein wendet euch an euren Serveradmin oder Serveranbieter.
Als erstes lege wir die .htpasswd an. Diese Datei enthält die zukünftigen Logins/Passwörter die per htaccess benutzt werden können. Da ich Shellzugriff habe benutze ich das Programm htpasswd. Das muss man aber nicht, da es nur eine einfache Textdatei ist. Man kann zum erstellen auch einen online Generator wie diesen hier benutzen.
$ htpasswd -c /var/www/vh-example/htdocs/.htpasswd admin
Die .htpasswd sollte man soweit möglich außerhalb der DocumentRoot des Webservers ablegen. Der Apache unterbindet zwar den direkten Zugriff auf diese Dateien, aber darauf verlasse ich mich nicht und der .htaccess ist es egal wo die Passwortdatei liegt, solange der Webserver User darauf zugreifen darf (die richtigen Zugriffsrechte gesetzt sind).
wp-admin schützen
Jetzt legen wir eine .htaccess in den wp-admin Ordner und füllen sie mit dem Standardcode zur Passwortabfrage.
$ nano /var/www/vh-example/htdocs/public/wp-admin/.htaccess
AuthType Basic
AuthName "Members Only"
AuthUserFile /var/www/vh-example/htdocs/.htpasswd
<limit GET PUT POST>
require valid-user
</limit>
Damit ist der wp-admin Ordner geschützt. Da die wp-login.php CSS Dateien aus dem wp-admin Ordner einbindet, bekommt ihr jetzt schon ein htaccess Fenster angezeigt wenn ihr euch einloggen wollt. Das heißt aber nicht das wir schon fertig sind, sondern nur das die Login Seite echt scheiße aussieht wenn man das richtige Passwort nicht eingibt.
wp-login.php schützen
Zum schützen der wp-login.php müssen wir eine weitere .htaccess Datei anlegen und diese sollte im Blog root liegen. Da hier meist schon eine vorhanden ist öffnen wir sie und fügen unseren code einfach dazu.
$ nano /var/www/vh-example/htdocs/public/.htaccess
AuthUserFile /var/www/vh-example/htdocs/.htpasswd AuthName "Members Only" AuthType Basic <Files "wp-login.php"> require valid-user </Files>
Das war es. Jetzt ist jede Datei im wp-admin Ordner und die wp-login.php in der Blog Root mit dem htaccess Passwort geschützt. Ihr müsste es natürlich nur einmal eingeben wenn ihr euch einloggt, solange ihr bei beiden Dateien den gleiche AuthName (Realm) eingetragen habt. Der Browser cached es für die Dauer eurer Session zwischen..
Erweiterung
In diesem Beispiel werden die Passwörter in Klarschrift übertragen, was natürlich ein Nachteil und mögliches Sicherheitsrisiko ist. Hier kann man mod_auth_basic durch mod_auth_digest ersetzen. Mit mod_auth_digest wird die Authentifizierung per md5 durchgeführt was eine gewisse Sicherheitserhöhung darstellt. Wenn man jetzt noch den Zugriff auf die wp-login.php und den wp-admin Ordner per SSL (https) steuert hat man ein sehr sicheres System.
Ein weiterer Punkt ist das hinzufügen der Passwortabfragen direkt in der vhost config des Webservers. Das hat den Vorteil das man bei updates nicht immer an die einzelnen htaccess Dateien in den Unterordnern denken muss und man kann dann wo möglich sogar den Check nach htaccess Dateien komplett abschalten und so einen gewissen Performance Gewinn erzielen.
Probleme
Leider greifen einige Seiten genauso wie die wp-login.php auch auf CSS Dateien aus dem Admin Ordern zu… An diesen Stellen öffnet sich dann für den User die Passwortabfrage. Hier die Stellen die ich bis jetzt gefunden habe:
- /wp-includes/functions.php – wp_die()
Im Kopf der Errormeldung wird ein Admin CSS geladen. Ich habe es einfach entfernt.
Wem noch weitere Stellen auffallen kennt kann mir ein Kommentar hinterlassen.
Danke
Bitte