WordPress sicherer machen – ohne Plugins
Letztens schrieben einige Blogger (darunter auch ich) über das Plugin namens Limit Logins Attempts. Der Beitrag in Kurzform: die Möglichkeit den Administrationsbereich von WordPress gegen zu häufige falsche Eingaben von Benutzernamen und Kennwort absichern. In den Kommentaren hieß es unter anderem, dass es einfacher wäre den Administrationsbereich durch eine .htaccess-Authentifizierung abzusichern. Klingt kompliziert sofern man das erste Mal davon liest – und auch die Möglichkeiten sind vielfältig. Wie einfach das allerdings im Falle eines Blogs sein kann, werde ich hier einmal versuchen zu erklären. Zum Mitmachen quasi.
Ich fange jetzt nicht beim Urschleim an und werde jede Kleinigkeit der .htaccess-Datei erzählen – zumal ich eh nicht alles weiß. Der geneigte Freund des gepflegten Verzeichnisschutzes kann sich ja gerne hier schlau lesen.
Ziel dieser Aktion: Absichern des Administrationsbereich von WordPress durch einen zusätzlichen Schutz. Statt des WordPress-Logins erscheint eine vom Server gestellte Abfrage, bei der man sich authentifizieren muss bevor man zur Loginmöglichkeit gelangt.
Wie funktioniert es? Quasi ganz einfach – denn im Netz gibt es eine Vielzahl von Generatoren, die es euch ermöglichen automatisiert eine .htaccess-Datei zu erstellen. Zwei Dateien sind zur Absicherung nötig – einmal die Datei .htacess für den Sicherungsaufruf als solches und die Datei .htpasswd, die euren Benutzernamen und das Passwort enthält. Logischerweise sollte dieses Passwort ungleich zu eurem WordPress-Passwort sein 🙂
Benutzer von Windows sollten sich nicht wundern wenn sie diese Dateien nicht erstellen können – Windows erlaubt diese Dateinamen nicht. Ihr müsst also erst die Dateien ohne den Punkt am Wortanfang erstellen – das Umbenennen könnt ihr mit eurem FTP-Programm auf eurem Server machen.
Was ist noch wichtig zu wissen? Ihr müsst den absoluten Pfad des WP-Admin-Ordners auf eurem Webserver herausbekommen. Dies ist aber in keinster Weise kompliziert. Erstellt im Rootverzeichnis eures Blogs einfach eine PHP-Datei (zum Beispiel Serverinfo.php) mit folgende Inhalt:
<?
PHPINFO();
?>
Ruft ihr nun diese Datei im Webbrowser auf, so verrät dieser euch einige Infos. Auch eben den absoluten Pfad von wo das Script ausgeführt wurde. Sofern es sich um einen Apache-Server handelt wird euch der Pfad unter SCRIPT_FILENAME verraten:
Diesen Pfad erweitert ihr nun um /wp-admin – das wäre dann der absolute Pfad zu eurem WP-Admin-Ordner. Kopieren und merken 😉
Begebt euch nun auf diese Seite, gebt den gewünschten Benutzernamen nebst Passwort ein – dazu den eben herausgefundenen absoluten Pfad.
Mit einem Klick auf “Generate .htaccess” werden die Inhalte für die beiden Dateien erstellt.
Übernehmt die Inhalte in eure Dateien und speichert die Änderungen ab. Die Dateien .htaccess und .htpasswd müssen nun ins WP-Admin-Verzeichnis eures Servers.
In Zukunft werdet ihr nach einem Benutzernamen und einem Passwort gefragt (siehe erster Screenshot) – sofern ihr in euer WordPress-Dashboard wollt. Ob ihr dieses in eurem Browser speichert bleibt euch überlassen. Beachtet bitte dass die .htaccess den chmod 0644 hat.
Dieser Beitrag ist übrigens nur ein kleiner Anriss dessen, was mit mit .htaccess machen kann. Ich erhebe hier keinen Anspruch auf Vollständigkeit. Wer mehr wissen will der darf sich gerne schlau machen =)
Nachtrag: Michael meint, dass man zwei Verzeichnisse ausklammern sollte, da aus diesen Ordnern Dateien bei fehlerhaften Kommentaren nachgeladen werden. Erstellt eine .htaccess mit folgendem Inhalt:
Order Deny,Allow
Allow From All
Satisfy Any
Diese .htaccess kommt dann jeweils in wp-admin/images und wp-admin/css.
Nachtrag 2: Alternativ kann man auch in obige .htaccess diesen Code einsetzen :
<Files ~ "\.(png|gif|css)$">
Order allow,deny
Allow from all
</Files>
Somit erlaubt man den Zugriff auf die benötigten Dateien. Auch hat man den Vorteil, dass nur eine .htaccess benötigt wird. Danke lordfiSh.
Vielleicht auch meine 10 Schritte zum Schutz des Admin-Bereichs in WordPress interessant…
Wie soll man bitte schön eine htacces auslesen können, wenn die Inhalte per MD5 verschlüsselt ist???
Wie lange soll das dauern? 2 Jahre?
@Knollo: Genau das sind sie ja eben nicht. Das ist eine reine Textdatei, die auf dem Server liegt. Die Passwörter in der htpasswd sind Base64 verschlüsselt und leicht knackbar, wenn man sie hat, die User stehen im Klartext drin (siehe Artikel)
User ja, das ist klar. Na dann viel Spaß:
$1$OTtaBbYh$S7X/Y5yXk6ijknPeScmlg0
Ist NICHT Base64 sondern MD5! Ich geb noch ne Hilfe: Alles Kleinbuchstaben, damit es schneller geht.
Für diesen Sachverhalt gibt es auch ein Plugin für WP, AskApache Password Protect.
Gruß
Ick
Puh, meinst du das Verschieben der wp-config.php? Ja, da müsste man beim automatischen Update beobachten, ob WordPress genau so schlau wie beim Einlesen der Datei ist und von alleine im höherliegenden Verzeichnis sucht und updatet. Habe damit noch keine Erfahrungen sammeln können.
Wie ist das aber wenn du dein adminmenu per htaccess schützt kannst du dann immer noch Artikel ganz normal mit dem Windows Live Writer online stellen?
@Andi:
Wie man sieht funktioniert das einwandfrei =) Die xmlrpc.php liegt ja auch in der Blog-Root.
Ich würde evtl dem Beitrag noch den Hinweis hinzufügen die phpinfo anschliessend wieder zu entfernen, schliesslich dreht sich der Beitrag um Sicherheit 😉
Ah stimmt da hab ich ned dran gedacht das die xmlrpc.php ja ned im adminbereich liegt.
Wie ist es auch mit der Admin Bar? Die klappt auch immer noch? Ohne das man auch auf der Hauptseite die htaccess daten eingeben muss.
Probiere es einfach aus. 😉
Habe gerade selbst meine htaccess-Files überarbeitet, gute Hilfe hierbei gibt die Seite von AskApache, wer das Plugin für WP nicht installieren will findet die verwendeten Codes hier.
@Puh Du hast nen Feingefühl wie ein Presslufthammer. g
😉
Wenn eine .htaccess deinen Fuchs abstürzen lässt, dann hast du ganz andere Probleme.
Ich würde da auch eher auf eine veraltete Flash-Version tippen, da es damit sowieso schon immer Probleme in Kombination mit dem WP-Uploader gab.
@Puh:
Ich blogge nicht immer per Live Writer, sondern auch gelegentlich via Backend. Ich hätte meine Aussage auch nicht getroffen wenn ich es nicht selber vorher ausprobiert habe. Ich kann also kein Problem feststellen. Ist aber auch egal – bei dir löste das einen Fehler aus den du ja nun beheben konntest. Alles gut.
Ich glaub deswegen nicht dran, weil ich es selber genauso „schütze“ und die gleiche Software verwende.
Naja, sehr schön!Die Tipps von Sergej sind ja echt toll.Danke;) Die Seite finde ich sehr schön.Danke.Weiter so!
Und wie wäre es hiermit? Kann mal jemand prüfen ob es auch bei euch funktioniert?
1. Schutz der login.php – die liegt im Root der Domain (wäre bei mir unter /html). Da ich aber gelesen habe es wäre besser unter /html (root) einen wordpress Ordner anzulegen, habe ich es getan und ihn mal gleich umbenannt:
/html/wordpress_denk_dir_was_aus
in diesem Ordner befindet sich nun die ganze wordpress installation, also auch login.php
Dort lege ich die .htaccess an:
# protect wp-login.php
AuthName „Admin-Bereich“
AuthType Basic
AuthUserFile /lokaler-pfad-zu/.htpasswd (muss noch angepasst werden!!!)
require valid-user
Mehrfach habe ich gelesen es wäre nicht sicher genug in GENAU DIESEM ORDNER die .htpasswd zu speichern und schon gar nicht mit eben diesen Namen.
Also bin ich aus dem Ordner wordpress_denk_dir_was_aus
raus und eine Ebene höher. Und Habe unter /html einen ganz neuen Ordner angelegt, mit einem beliebigen Namen.
z.B. bierbauch in diesem habe ich nun die vorgefertigte .htpasswd rein getan (und nur dort); diese eigentlich dort liegen sollte wo die .htaccess liegt.
Dann habe ich es mir noch gewagt die .htpasswd einfach umzubenennen z.b. dass_kommt_davon_wenn_man_zuviel_bier_trinkt
Dann bin ich wieder in meinen wordpress_denk_dir_was_aus und habe den Pfad in der .htaccess angepasst:
# protect wp-login.php
AuthName „Admin-Bereich“
AuthType Basic
AuthUserFile /home/www/webXYZ/html/bierbauch/dass_kommt_davon_wenn_man_zuviel_bier_trinkt
require valid-user
Dann habe ich mich versucht einzuloggen und es klappt bei mir auch alles wunderbar.
Einloggen muss ich mich aber nun mit der Ergänzung des wordpress ordners, also so:
http://meinedomain.de/wordpress_denk_dir_was_aus/wp-login.php
Hat jemand von euch Erfahrung damit? Ist es sicher genug?
2. Weiter habe ich aus dem wp ordner die index.php in /html KOPIERT und in auch einer dort liegenden .htaccess den Pfad angepasst
require(‚./wordpress_denk_dir_was_aus/wp-blog-header.php‘);
3. Habe ich dann noch die config.php aus dem wp Ordner auch unter /html VERSCHOBEN. Auch wenn es vielleicht nicht notwendig ist, habe ich die config.php nochmal abgesichert. In die dort schon liegende .htaccess habe ich noch den Schutz für die config.php dazu getan.:
# protect wpconfig.php
Order deny,allow
deny from all
Angeblich sucht wp automatisch in höheren Ebenen nach der config.php und wenn es so ist, dürfte auch die Einspielung einer neueren Version keine Probleme bereiten.? Oder habe ich was falsch verstanden?
Als nächstes wage ich mich mal daran wp-content aus dem wp Ordner auch unter /html zu verbannen und umzubenennen. Mal schauen ob es mit den Anpassungen auch problemlos funktioniert.
Habe gelesen im wp-admin ordner kann man install.php und upgrade.php auch mal löschen. Hat jemand andere Erfahrungen?
Freue mich auf Feedback…