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.

Gefällt dir der Artikel? Dann teile ihn mit deinen Freunden.

caschy

Hallo, ich bin Carsten! Baujahr 1977, Dortmunder im Norden, BVB-Getaufter und Gründer dieses Blogs. Auch zu finden bei Twitter, Google+, Facebook, Instagram und YouTube. PayPal-Kaffeespende. Mail: carsten@caschys.blog

Das könnte dir auch gefallen…

Mit dem Absenden eines Kommentars willigst du unserer Datenschutzerklärung und der Speicherung von dir angegebener, personenbezogener Daten zu.

43 Kommentare

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

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

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

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

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

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

  7. Joa, sowas passiert mir Anarchisten schon manchmal 😉

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

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

  10. Aber gerne doch!

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

  12. dann lieber so

    Order allow,deny
    Deny from all

    dann brauch man nur eine .htaccess

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

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

  14. Tatsache.

    Kann ja einfach in die einzelne htaccess rein =)

  15. @Puh:

    Liegt an dem DENY.

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

  17. @Enrico:

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

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

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

  20. 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?

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

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

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

    Gruß
    Ick

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

  25. 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?

  26. @Andi:

    Wie man sieht funktioniert das einwandfrei =) Die xmlrpc.php liegt ja auch in der Blog-Root.

  27. Ich würde evtl dem Beitrag noch den Hinweis hinzufügen die phpinfo anschliessend wieder zu entfernen, schliesslich dreht sich der Beitrag um Sicherheit 😉

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

  29. Probiere es einfach aus. 😉

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

  31. @Puh Du hast nen Feingefühl wie ein Presslufthammer. g

    😉

  32. Wenn eine .htaccess deinen Fuchs abstürzen lässt, dann hast du ganz andere Probleme.

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

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

  35. Ich glaub deswegen nicht dran, weil ich es selber genauso „schütze“ und die gleiche Software verwende.

  36. Naja, sehr schön!Die Tipps von Sergej sind ja echt toll.Danke;) Die Seite finde ich sehr schön.Danke.Weiter so!

  37. 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…

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 morgens eine Zusammenstellung. Mit dem Absenden willigst du unserer Datenschutzerklärung und der Speicherung von dir angegebener, personenbezogener Daten zu.
Wir benutzen Cookies um die Nutzerfreundlichkeit der Webseite zu verbessern. Durch Deinen Besuch stimmst Du dem zu.