In 6 Schritten zu einer gehärteten WordPress
Wer mit WordPress seine Webseiten gestalten will kommt schnell zu Erfolgserlebnissen. WordPress ist einfach zu bedienen und fast genauso einfach zu installieren. Wenn man jedoch etwas mehr Sicherheit wünscht, ist Handarbeit gefragt. Dabei einen Fehler zu machen, könnten an manchen Stellen ziemlichen Ärger bedeuten – also sorgfältig arbeiten und sorgfältig überlegen, ob ich in meiner Anleitung nicht irgendetwas vergessen oder falsch beschrieben habe!
- Daten sichern
- Konfigurationsdatei “wp-config.php” absichern
- Benutzerverwaltung absichern
- Admin-Konto absichern
- Anmeldung via SSL
- Tabellenpräfix “wp_” ändern (nur für Bastler)
Mit diesen 6 Schritten können Sie Ihre WordPress ein ganzes Stück sicherer machen. Wir gehen nun im Detail auf die Punkte ein und am Ende finden Sie noch einen Hinweis dazu, wie Sie die WordPress während dieser Arbeiten in einen Wartungsmodus versetzen können. Wir beginnen mit der Datensicherung:
1. Daten sichern
Der erste Schritt zu mehr Sicherheit ist es, noch vor dem Weiterlesen alle Daten zu sichern. Das bedeutet:
- Das WordPress-Verzeichnis sichern.
- Die Datenbank sichern, die WordPress verwendet.
Wie Sie das Verzeichnis sichern, hängt von Ihrem Provider ab, also zum Beispiel via FTP, WebDAV oder die Weboberfläche Ihres Providers. Stellen Sie sicher, dass die Datensicherung auch funktioniert hat und Sie die richtigen Verzeichnisse und Daten gesichert haben. Prüfen Sie also insbesondere, ob Sie nicht irgendwelche leeren Verzeichnisse oder Datenbanken, die nur einen schöneren Namen hatten gesichert haben. Ob Ihnen so etwas passieren kann, hängt davon ab, wie viel Ordnung Sie auf Ihrem Server halten.
2. Konfigurationsdatei “wp-config.php” absichern
Um die Datei wp-config.php zu schützen geben Sie folgenden Code in die .htaccess-Datei ein, die sich im selben Verzeichnis wie wp-config.php befindet:
# Schützt wpconfig.php
<files wp-config.php>
Order deny,allow
deny from all
</files>
3. Benutzerverwaltung absichern
Sie sollten natürlich nicht alle Beiträge als Administrator verfassen, sondern ein eigenes Nutzerkonto haben, das eingeschränkte Rechte hat. Außerdem sollten Sie unter Einstellungen › Allgemein › Mitgliedschaft › Jeder kann sich registrieren die Checkbox deaktivieren, wenn Sie das nicht ausdrücklich wünschen.
4. Admin-Konto absichern
Bevor das vorinstallierte Admin-Konto gelöscht werden kann, sollte man einen neuen Admin anlegen. Der Benutzername des Admin sollte danach sinnigerweise nicht Admin sein und auch nicht als Anzeigename verwendet werden. Tragen Sie dazu unter Benutzer › Benutzer bearbeiten im Profil des neuen Admin-Kontos im Feld Spitzname einen anderen Namen ein und ändern Sie dann die Auswahl unter Öffentlicher Name auf den Spitznamen.
Das vorinstallierte Admin-Konto hat in der Datenbank die ID 1. Im Dashboard ist das nur bei der Bestätigung zum Löschen sichtbar. Unter anderem wegen der ID 1 sollte ein neues Admin-Konto angelegt werden. ID 2 oder 3 ist jedoch auch nicht viel einfallsreicher. Wenn Sie das ändern wollen, ist etwas Handarbeit in der hinter der WordPress liegenden Datenbank gefragt. Dazu sind die folgenden Schritte zu erledigen:
- Als erstes müssen Sie sich darüber Gedanken machen, ob der Admin bereits Beiträge veröffentlicht hat. Wenn ja, dann sind diese mit der ID des Autors verknüpft. Sie sollten das alte Admin-Konto also erst löschen, nachdem die ID geändert ist. Dann können die Artikel im Lösch-Dialog der WordPress an den richtigen Autor übertragen werden, so dass auch die ID stimmt. Erst nachdem diese Frage geklärt ist, kann es weitergehen:
- In der Tabelle wp_users müssen Sie die ID des neue angelegten Admin ändern.
- In der Tabelle wp_usersmeta müssen Sie die alte ID des neuen Admins in die neue ändern, damit alle Profileinstellungen übernommen werden.
- Testen Sie eine Anmeldung mit dem neuen Konto. Hat alles geklappt?
Wenn Ihr Provider Ihnen eine phpMyAdmin-Oberfläche anbietet, können Sie diese Schritte recht einfach erledigen. Ansonsten sollten Sie sich ein SQL-Buch kaufen. Wenn der neue Admin dann richtig eingerichtet ist, kann das ursprüngliche, nach der Installation vorhandene Admin-Konto gelöscht werden.
5. Anmeldung via SSL
Bevor wir noch einmal an der Datenbank Hand anlegen, lohnt es sich, die Kommunikation mit der Webseite zu optimieren und verschlüsselt zu arbeiten. Das kann man machen, indem man auf dem Server ein SSL-Zertifikat hat und via https arbeitet. Damit WordPress alle Links richtig setzt muss man unter Einstellungen › Allgemein in den Feldern WordPress-Adresse (URL) und Blog-Adresse (URL) jeweils https:// schreiben statt http ohne s.
Laut c’t extra 01/2010 soll das auch über einen SSL-Proxy des Hosters funktionieren. Danach erreicht man die WordPress zum Beispiel bei 1&1 unter “https://ssl.kundenserver.de/ihredomain.example.com/wp-login.php”. Leider funktioniert das bei mir und 1&1 nicht so wie es in der c’t versprochen wird. Mein Firefox überträgt Nutzername und Passwort weiterhin unverschlüsselt und direkt. Also keine so gute Idee.
6. Tabellenpräfix “wp_” ändern (nur für Bastler)
Was jetzt noch bleibt, ist es, das Tabellenpräfix der WordPress zu ändern. Leider funktioniert das nicht ganz so einfach. Daher ist es auch der Punkt 6. So wie es in c’t extra 01/2010 beschrieben ist, funktioniert es jedenfalls nicht, was auch der Autor des Artikels bereits eingesehen hat. Er schreibt, dass dies nur sehr erfahrene Anwender in Angriff nehmen sollten, da er selber in zwei Test-Fällen arg zu kämpfen hatte. Er schlägt folgendes vor:
Das Tabellenpräfix ist in der Konfigurationsdatei (wp-config.php) definiert. Dort muss es neu festgelegt werden (streiche wp setze zb):
$table_prefix = 'zb_';
Mit phpMyAdmin müssen danach alle bestehenden Tabellen umbenannt werden. Dazu muss man links auf die erste Tabelle klicken. Über das Tab “Operationen” kann man die Tabelle umbenennen. Das wiederholt man dann für jede Tabelle in der Datenbank. Zum Schluss müssen die Felder der Tabellen .._options und .._usermeta geändert werden:
UPDATE zb_options SET option_name = REPLACE(option_name, 'wp_', 'zb_');
UPDATE zb_usermeta SET meta_key = REPLACE(meta_key, 'wp_', 'zb_');
Wer Schritt 6 versuchen will, dem wünsche ich schon mal viel Glück. Schlimmstenfalls steht man eben vor verschlossener Tür, was ähnliche Gründe hat wie bei der Änderung der ID weiter oben.
Wartungsmodus
Wer während dieser ganzen Arbeiten versuchen möchte seiner WordPress mit einem Plugin in den Wartungsmodus zu schicken, der sollte sich darüber im Klaren sein, dass so ein Plugin ebenfalls mit den Tabellen der Datenbank arbeitet. Spätestens bei Schritt 6 klappt das dann nicht mehr.
Seit WordPress 3.0 gibt es einen Workaround: Der interne Wartungsmodus funktioniert mit der Datei .maintenance im WordPress-Stammverzeichnis, die bei WordPress-Updates automatisch generiert wird. Man kann diesen automatischen Wartungsmodus imitieren, in dem man die Datei manuell auf den Server stellt. Sie muss folgenden Text enthalten:
<?php $upgrading = 1281368693; ?>
Die Zahlenreihe ist das Ergebnis von <? echo time(); ?>. Dieser Zeitstempel wird von WordPress mit der aktuellen Zeit verglichen. Nach einer gewissen Zeit wird der Wartungsmodus dadurch wieder deaktiviert. Sie müssen den Wert also gegen den aktuellen Zeitstempel austauschen, den Sie zum Beispiel hier erfahren können. Standardmäßig sind 10 Minuten für den Wartungsmodus eingestellt. Die Zeit sowie die angezeigte Nachricht können sie in der Datei load.php im wp-includes-Verzeichnis bearbeiten.


Hallo,
dieser Teil des Satzes ist leider irreführend und auch nicht korrekt. Einsehen kann man nur etwas, wenn man vorher etwas anderes behauptet hat. Ich habe nie behauptet, dass es so wie in Artikel beschrieben ist, auch geht. Dieser Teil wurde von heise eingefügt.
In meinem Manuskript stand das man den Datenbank-Präfix bei der Installation ändern soll, dass geht ganz einfach. Nachher sollte man entweder darauf verzichten oder es sehr erfahrenen Leuten überlasen.
Das habe ich übrigens auch im Artikel erwähnt, welchen du selber verlinkt hast.
Du schreibst in Deinem Artikel:
Ist ja nicht weiter schlimm. So was passiert bei dem hin und her mit dem Verlag eben manchmal. War ja trotzdem ein gelungener Artikel.
Ich hatte mir auch das Sonderheft der c’t zugelegt und beim Test von Punkt 5 (SSL-Proxy) genau die gleiche Erfahrung gemacht (Sicherheitswarnung von Firefox).
Geholfen hat ein Code-Schnippsel, der in die wp-config.php eingebaut werden muss. Infos gibt’s unter http://anb-networkz.de/2009/09/wordpress-site-url-bei-anfragen-uber-einen-ssl-proxy-umschreiben/comment-page-1/#comment-64
Jetzt klappt’s (zumindest bei Host Europe)!