KenntWas.de – Technische Tipps

Technische Informationen zu Linux, (Oracle-) Datenbanken und mehr

WordPress: Login zusätzlich durch Apache htpasswd sichern

| 1 Comment

WordPress: Login zusätzlich durch htpasswd sichern Es gibt mehrere Gründe, das WordPress-Login zusätzlich durch eine Apache Authentifizierung zu sichern. Fehler in Plugins oder WordPress können von Einbrechern ausgenutzt werden. Der gestrige Einbruch in das WordPress Plugin Repository ist ein anderer Grund.

Lücke in W3 Total Cache (W3TC)

In den Page Cache Einstellungen von W3TC gibt es einen Button, vor dem ich nur warnen kann. Wenn der Haken bei “Don’t cache pages or logged in users” entfernt wird, wird die Seite des ersten Besuchers mit Login-Cookie in den W3TC-Cache aufgenommen. Wenn ein eingeloggter Administrator sich die Seite noch einmal zur Überprüfung angeschaut hat (wer macht das nicht), sind die anderen Besucher automatisch eingeloggt.

siehe auch: Big Security Thread (engl.)

 

Niemals diesen Parameter deaktivieren!

Niemals diesen Parameter deaktivieren!

Apache .htpasswd

Zum Absichern von Webseiten mit Apache muss man sicht zunächst eine Datei mit Benutzern und Passworten erstellen. Der Name ist egal, verwendet wird meistens .htpasswd.

Der Aufbau ist einfach. Erst kommt der Benutzername (hans), dann das verschlüssselte Passwort. Für jeden Benutzer gibt es eine Zeile.

hans:$1$xCNXnDXt$FtrQ6GHt1Fxc6lU4u2EPV.

Auf einem Linux / Windows System verschlüsselt man die Passworte mit dem Programm htpasswd2. Wer das nicht zur Verfügung hat, weil die Seiten bei einem Webhoster ohne ssh-Zugang liegen, kann sich die Passworte auch online berechnen (hashen) lassen.

Online Tools für htpasswd

Je länger das Passwort, desto besser die Verschlüsselung. Nicht das gleiche Passwort wie in WordPress verwenden!
Eventuell auch einen anderen User verwenden.

Als Ergebnis bekommt man zwei Verschlüsselungen. Die MD5 Verschlüsselung ist stärker und kann bei den meisten Apache Webservern verwendet werden.

Your DES encrypted .htpasswd entry is:

hans:yyjZ3HR8l2kos

Your MD5 encrypted .htpasswd entry is:

hans:$1$Lz.Kpmfy$mqCpSYppgzCRuOLHDjJiE0

Zugriffsrechte

Die Datei .htpasswd muß dann auf den Webspace übertragen werden.

Sie sollte (möglichst nur!) für den Webserver lesbar sein. Schreibrechte für alle User entfernen.
Bei WinScp erreicht man über “<rechte Maustaste> / Eigenschaften” die Dateizugriffsrechte.

WinScp: Fileproperties

WinScp: Fileproperties

WinScp: Dateirechte

Schreibrechte aus. Für die Leserechte ist es optimal, wenn nur der Owner die Datei lesen kann. Das klappt aber nicht bei jedem Hoster.

Apache .htaccess

Zum Sichern der Datei wp-login.php mit der Apache Basic – Authentifizierung muss man zuerst in der .htaccess – Datei eintragen, welche Dateien gesichert werden sollen. Die Passworte stehen dann verschlüsselt in der Datei .htpasswd. Besser ist es noch, wenn .htpasswd in einem Verzeichnis liegt, dass nicht von außen durch den Webserver erreichbar ist. Beide Dateien (.htpasswd und .htaccess) sollten schreibgeschützt sein.

Zusätzlich muss unterbunden werden, dass die Dateien .htaccess, .htpasswd,… durch den Webserver abgefragt werden können.

##
## MUST be php5
AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php

#
# this files should *not* be readable via apache!
#
<FilesMatch "(\.htaccess|\.htpasswd|wp-config\.php|liesmich\.html|readme\.html)">
 order deny,allow
 deny from all
</FilesMatch>

#
# Secure access to wp-login.php
#
<Files wp-login.php>
 AuthName "Admin-Login"
 AuthType Basic
 # absolute path: !!!
 AuthUserFile /homepages/xyz/blog/.htpasswd
 require valid-user
</Files>

Es ist hierbei unerheblich, ob die Datei wp-login.php in einem Unterverzeichnis liegt. Die Direktive gilt für alle Dateien mit diesem Namen (im aktuellen oder in Unterverzeichnissen).
Ein Versuch, das ganze Verzeichnis wp-admin mit einem Passwort zu versehen, führte bei mir zu Problemen.

Wie komme ich an den absoluten Pfadnamen?

Der Pfadname für die .htpasswd-Datei muss absolut angegeben werden.
Wenn man den absoluten Pfad seiner Webinstallation (bei einem Webhoster) nicht weiß, kann man ihn mit einem Trick ermitteln.

Tip von Neotrauma:

<?php
 $var = getcwd();
 echo $var;
 ?>

Die Datei als absoluterpfad.php sichern, im Browser aufrufen – voilà. Danach die Datei wieder löschen.

Eine andere Möglichkeit ist das WordPress Plugin TCP! Memory Usage.
Der Compability-Check von W3TC gibt den Pfad auch aus (W3TC nur installieren, wenn man weiß was man tut!).

Weitere Möglichkeiten: Limit LoginAttempts

Perun beschreibt einige WordPress Plugins, die  die Anzahl der Loginversuche begrenzen und Benutzer (IP-Adressen) nach Fehlversuchen aussperren. Mir ist die Apache Htpasswd Methode lieber als noch ein Plugin. Sie schützt vor Programmfehlern (z.B. W3TC).

One Comment

  1. danke sehr,
    der trick mit absoluterpfad.php war die rettung.

    vg
    jürgen

Leave a Reply

Required fields are marked *.