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.
Problem an der Sache: Es können sich keine normalen Nutzer (Subscriber) mehr einloggen
Ich erlaube mir mal 2 Hinweise:
Vor einiger Zeit habe ich mal eine Anleitung geschrieben zu „Erstellen eines geschützten Verzeichnisses mit htaccess“ link text. Auch wenn es nicht, wie bei Caschy üblich eine keine Freeware ist (ich kenne keine) kann man mit DA-HtAccessManager (€14,99EUR)link textseine Benutzernamen und Passwörter im Überblick behalten und verwalten.
@Caschy bitte den/die Links löschen falls nicht akzeptabel hier.
Sehr wichtig: Die htpasswd sollte in einem von außen nicht-zugänglichen Ordner liegen, sonst lassen sich auch diese Kennwörter entschlüsseln.
@ Lordfish: Die haben ja auch nix im Admin-Bereich verloren.
Den Admin-Bereich per HTTP-Authentifizierung zu schützen, sollte bei jedem frisch aufgesetzten CMS zu den ersten Schritten gehören. Gerade auch unter dem gern gehackten Joomla erste Adminpflicht.
@Michael, ich denke lordfiSh will darauf aufmerksam machen, dass ich keine Leute mehr in ein Blog einloggen können. Naja, in einem „normalen“ Blog meiner Meinung nach eh Humbug – und bei einem Multi Autor Blog haut man die Autoren mit rein =)
Ohne Spaß: Ich hab wirklich gelacht, als ich „ohne den Punk am Wortanfang erstellen“ gelesen hab. Dachte, das muss so.
Joa, sowas passiert mir Anarchisten schon manchmal 😉
Caschy, gib mal einen fehlerhaften Kommentar bei dir ab! Ups. 😉
Lösung: Eine Ausnahme in wp-admin/images und wp-admin/css a la
Order Deny,Allow
Allow From All
Satisfy Any
in Form einer eigenen .htaccess
@Michael: ich nehme das mal mit Verweis auf dich auf.
Aber gerne doch!
(x) Done =)
Vielleicht sollte man noch erwähnen, dass die Lösung nur für den Apache funktioniert 🙂
dann lieber so
Order allow,deny
Deny from all
dann brauch man nur eine .htaccess
/edit: zeigt nicht alles an: http://nopaste.biz/63472
Stimmt, das geht natürlich auch und ist noch nen Tick eleganter!
Tatsache.
Kann ja einfach in die einzelne htaccess rein =)
@Puh:
Liegt an dem DENY.
Ich möchte dann auch noch einmal einen Punkt erwähnen, der gegen die Authentifizierung spricht: es ist für Bots immer noch ein leichtes, via Bruteforce Benutzername und Passwort beliebig oft zu erraten, da htaccess keine Beschränkung der Fehlversuche vorgibt.
Beim Login muss lediglich eine Base64 verschlüsselte Zeichenfolge mit an den Server gesendet werden. Die htpasswd sollte übrigens besonders geschützt werden (wurde ja schon erwähnt), da die anscheinend kryptischen Informationen sehr leicht auch wieder entschlüsselt werden können. – Kann ja eben nicht alles MD5 sein ^^
@Enrico:
Es handelt sich ja hierbei nicht um den einzigen Schutz – sondern um einen Zusatz =)
Alternativ:
Die Anleitung ist zwar für Joomla aber man kann es auch für andere Sachen benutzen.
http://www.schroeder-frank.net/downloads.html?func=fileinfo&id=42
Nachtrag 2 Klappt bei mit mit dem Login auch nicht. Das Problem ist das die beiden CSS
link rel=’stylesheet‘ href=
Stehen an Zeile 5 und 6
Diese müßte man anderweitig verlagern. Habe aber noch nicht gefunden wo man das wieder ändern müßte das es klappt.
Aber so klappt es eben nicht