WordPress sicherer machen – ohne Plugins

25. Januar 2009 Kategorie: Internet, WordPress, geschrieben von: caschy

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.

wphtaccess

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:

absoluterpfad

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.

absoluterpfad2

Mit einem Klick auf “Generate .htaccess” werden die Inhalte für die beiden Dateien erstellt.

absoluterpfad3

Ü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.

Über den Autor: caschy
Dortmunder im Norden. Blogger, Freund gepflegter Technik, BVB-Maniac und Hausmeister dieses Blogs. Auch zu finden bei Twitter, Google+, Facebook, XING und YouTube.

49 Kommentare

lordfiSh 25. Januar 2009 um 20:21 Uhr

Problem an der Sache: Es können sich keine normalen Nutzer (Subscriber) mehr einloggen

LuNeX 25. Januar 2009 um 20:33 Uhr

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.

Roman 25. Januar 2009 um 20:33 Uhr

Sehr wichtig: Die htpasswd sollte in einem von außen nicht-zugänglichen Ordner liegen, sonst lassen sich auch diese Kennwörter entschlüsseln.

Michael 25. Januar 2009 um 20:35 Uhr

@ 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.

caschy 25. Januar 2009 um 20:41 Uhr

@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 =)

Sebastian 25. Januar 2009 um 21:23 Uhr

Ohne Spaß: Ich hab wirklich gelacht, als ich “ohne den Punk am Wortanfang erstellen” gelesen hab. Dachte, das muss so.

caschy 25. Januar 2009 um 21:27 Uhr

Joa, sowas passiert mir Anarchisten schon manchmal ;)

Michael 25. Januar 2009 um 21:49 Uhr

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

caschy 25. Januar 2009 um 21:51 Uhr

@Michael: ich nehme das mal mit Verweis auf dich auf.

Filzo 25. Januar 2009 um 22:36 Uhr

Vielleicht sollte man noch erwähnen, dass die Lösung nur für den Apache funktioniert :)

lordfiSh 25. Januar 2009 um 22:41 Uhr

dann lieber so

Order allow,deny
Deny from all

dann brauch man nur eine .htaccess

/edit: zeigt nicht alles an: http://nopaste.biz/63472

Michael 25. Januar 2009 um 22:45 Uhr

Stimmt, das geht natürlich auch und ist noch nen Tick eleganter!

caschy 25. Januar 2009 um 22:47 Uhr

Tatsache.

Kann ja einfach in die einzelne htaccess rein =)

Puh (twitter ) 26. Januar 2009 um 01:41 Uhr

Herzlichen Dank!

Ich habe schon länger einen Verzeichnisschutz per .htaccess auf meinem Adminbereich, aber mir war bislang nicht bewusst, dass ich die zwei Verzeichnisse wp-admin/images und wp-admin/css vom Schutz ausnehmen muss.

Puh (twitter ) 26. Januar 2009 um 01:48 Uhr

@lordfish
Wenn ich das in meine /wo-admin/.htacces schreibe, dann wird mein Adminbereich nicht richtig angezeigt. Ich mach das lieber mit dem Code von Michael in 2 weiteren .htaccess-Dateien

caschy 26. Januar 2009 um 07:18 Uhr

@Puh:

Liegt an dem DENY.

Enrico 26. Januar 2009 um 08:09 Uhr

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 ^^

caschy 26. Januar 2009 um 08:10 Uhr

@Enrico:

Es handelt sich ja hierbei nicht um den einzigen Schutz – sondern um einen Zusatz =)

Havoc 26. Januar 2009 um 09:34 Uhr

Alternativ:
Die Anleitung ist zwar für Joomla aber man kann es auch für andere Sachen benutzen.

http://www.schroeder-frank.net.....#038;id=42

Dirk Paehl (twitter ) 26. Januar 2009 um 09:43 Uhr

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

Puh (twitter ) 26. Januar 2009 um 13:19 Uhr

Danke Sergej, deine Tipps sind wirklich klasse, nur mit Dateien verschieben und Ordner umbenennen wird man doch sicher beim nächsten Update Probleme bekommen, oder?

Knollo 26. Januar 2009 um 13:23 Uhr

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?

Enrico 26. Januar 2009 um 13:34 Uhr

@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)

Knollo 26. Januar 2009 um 13:44 Uhr

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.

Ick 26. Januar 2009 um 13:48 Uhr

Für diesen Sachverhalt gibt es auch ein Plugin für WP, AskApache Password Protect.

Gruß
Ick

Sergej Müller (twitter ) 26. Januar 2009 um 17:21 Uhr

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.

Andi 26. Januar 2009 um 21:29 Uhr

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?



Du willst nichts verpassen?
Neben der E-Mail-Benachrichtigung habt ihr auch die Möglichkeit den Feed dieses Beitrags zu abonnieren. Wer natürlich alles lesen möchte, der sollte den Hauptfeed abonnieren. Alternativ könnt ihr euch via E-Mail über alle neuen Beiträge hier im Blog informieren lassen. Einfach eure E-Mail-Adresse hier eingeben, dann bekommt ihr 1x täglich eine Zusammenstellung.

Deine Meinung ist uns wichtig...

Name*


E-Mail* (wird nicht veröffentlicht)


Webseite


Twitter-Name


Blogverzeichnis - Blog Verzeichnis bloggerei.de