Vorheriger Artikel Nächster Artikel

Sicher bloggen: WordPress mit wenigen Kniffen vor Angriffen schützen

Aus dem
t3n Magazin Nr. 17

09/2009 - 11/2009

wordpress-logo erfreut sich großer Popularität und rückt damit auch in das Visier von Menschen, die sich unbefugt Zutritt verschaffen wollen. Wie bei jeder Open-Source-Software können wie auch Angreifer gleichermaßen den einsehen. Die Gefahr von Spam-Links, einer Zerstörung des Blogs und anderen Angriffen ist daher hoch – könnte man meinen. Doch wie dieser Artikel zeigt, sind die Möglichkeiten, WordPress abzusichern, sehr vielschichtig.

Es gibt viele Wege, um eine WordPress-Installation abzusichern. In diesem Artikel werden lediglich jene beleuchtet, die mit geringem Aufwand in WordPress realisiert werden können. Eine Gewichtung ist dabei nur schwer möglich und im Einzelfall immer abhängig von den unterschiedlichen zur Verfügung stehenden Möglichkeiten. Hat man beispielsweise die Option, auf die Konfiguration des Servers zuzugreifen, kann bereits im Vorfeld ein hohes Maß an Sicherheit erreicht werden. Hier soll es lediglich um Sicherheitseinstellungen innerhalb von WordPress gehen.

WordPress sicher installieren

WordPress ist für seine einfache und unkomplizierte Installation bekannt. Diese Tatsache hat unter anderem zur Popularität der beigetragen, sorgt aber ebenso dafür, dass viele Einstellungen auf unterschiedlichsten Installationen gleich sind. Dies ermöglicht es Hackern, auf diverse Ausgangspositionen aufzusetzen und sich unbefugten Zutritt zu verschaffen.

Bereits bei der Installation von WordPress sollte man deshalb einige Punkte beachten, die dazu beitragen, dass das eigene weniger Gemeinsamkeiten mit einer Default-WordPress-Installation hat. Eine Installation, die vom Standard abweicht, erschwert potenziellen Eindringlingen den unauthorisierten Zugang. In diesem Zusammenhang sollte man einige Punkte beim Aufsetzen einer neuen Installation von WordPress beachten.

Alle Tipps beschränken sich auf die Möglichkeiten der Basisinstallation ohne Erweiterungen. Es existieren allerdings auch einige nützliche Plugins für mehr Sicherheit in WordPress, die besonders für weniger versierte Nutzer eine Alternative darstellen.

Tabelle-Präfix

Der Zugang zur Datenbank wird in der Datei wp-config.php konfiguriert. In dieser Datei wird auch das Tabellen-Präfix definiert, mit dem WordPress bei der Installation alle erforderlichen Tabellen anlegt. Standardmäßig handelt es sich hierbei um das Präfix „wp_“. Sie sollten immer ein fiktives Präfix vergeben, das nicht dem Standard entspricht. Außerdem sollten Sie darauf achten, dass Sie ausschließlich Zahlen, Buchstaben und Unterstriche verwenden, denn andere Zeichen werden nicht unterstützt.

Authentication Unique Keys

Ebenfalls in der Datei wp-config.php haben Sie die Möglichkeit, vier Sicherheitsschlüssel zu definieren, die die Sicherheit von WordPress erhöhen. Die Schlüssel erzeugen Sie entweder manuell oder über einen Generator von wordpress.org [1]. Die vier Schlüssel sind verschiedenen Cookies zugeordnet und werden an unterschiedlichen Stellen genutzt, um die Sicherheit von WordPress zu erhöhen, daher ist es auch wichtig, dass jede Installation unterschiedliche Schlüssel hat. Die relevanten Schlüssel sind folgende:

AUTH_KEY Wird genutzt für unsichere Verbindungen via http.
SECURE_AUTH_KEY Mit dieser Konstante lässt sich eine gesicherte Verbindung über https realisieren.
LOGGED_IN_KEY Hält fest, ob sich ein Nutzer eingeloggt hat; nicht administrativer Cookie.
NONCE_KEY Kommt unter anderem bei $_POST-Abfragen von WordPress zum Einsatz und kann durch Erweiterungen mit der Funktion wp_nonce() genutzt werden.

Wird eine bestehende Installation von WordPress aktualisiert, sollten die Schlüssel entsprechend ergänzt werden, hier am Beispiel von AUTH_KEY:

PHP

define('AUTH_KEY', 'put your unique phrase here'); // Hier gehört eine beliebige, möglichst zufällige Phrase rein

Listing 1

Datei- und Verzeichnisrechte

Unterscheiden Sie die Rechte der Dateien und Verzeichnisse angemessen. Je nach Arbeitsweise – ob Dateien in Themes und Plugins aus dem Backend heraus bearbeitet werden sollen oder ob Dateien abgelegt werden – sollten Sie die Rechte entsprechend setzen. Eingeschränkte Rechte erschweren es einem Angreifer, die Dateien und Verzeichnisse zu verändern.

Suchmaschinen nehmen in der Regel bis zu einer gewisse Tiefe, was sie bekommen können. Verhindern Sie mit Hilfe der Datei „robots.txt“ diesen Zugriff. Die internen Verzeichnisse von WordPress sollten in keinem Suchergebnis auftauchen – ein einfaches „Disallow“ genügt.

Je nach Serverkonfiguration besteht die Möglichkeit, dass man die Inhalte der Ordner im Browser listen kann. Dies gilt es zu verhindern, was durch das Ablegen einer leeren „index.html“ im jeweiligen Verzeichnis schnell erledigt ist. Alternativ kann dies mit Hilfe des Plugins „Secure WordPress“ [2] erledigt werden.

wp-content umbenennen

Alle Erweiterungen, Dateien und Themes werden bei der Standardinstallation im Ordner „wp-content“ abgelegt. Oft öffnen Themes oder Plugins eine Sicherheitslücke im System, daher ist es seit Version 2.6 möglich, diesem Ordner einen willkürlichen Namen zu geben und den Ordner an anderer Stelle abzulegen. Bei einer Neuinstallation ist das einfach und schnell gemacht. Es kann lediglich zu Problemen mit Plugins oder Themes führen, da nicht alle Autoren diesen Pfad mit Hilfe der bereitgestellten Konstanten und Funktionen abfragen. Daher ist diese Möglichkeit nur versierten Nutzern zu empfehlen.

Um den Ordner neu zu definieren, genügt es, diesen mit Hilfe der Konstanten in der wp-config.php festzulegen.

PHP

define('WP_CONTENT_DIR', ABSPATH . 'test');    // wp-content Directory
define('WP_CONTENT_URL', 'http://examble.com/test');    // wp-content UR

Listing 2

Gesicherter Zugang

Mit der Version 2.6 ist eine neue Möglichkeit hinzugekommen, das Backend der Installation abzusichern: der Zugriff via SSL – Secure Sockets Layer ist ein Verschlüsselungsprotokoll zur Übertragung von Daten. Ihr Webspace-Provider muss die Nutzung von SSL allerdings unterstützen. Ist dies der Fall, können Sie das Protokoll in der wp-config.php aktivieren. Um die Möglichkeiten von SSL im Bereich des Backend zu nutzen, müssen Sie die Konstante „FORCE_SSL_LOGIN“ mit „TRUE“ definieren. Von nun an werden alle Daten im Backend verschlüsselt übertragen.

PHP

define ('FORCE_SSL_LOGIN', true);

Listing 3

Sicherheit bestehender Installationen

Auch bestehende Blogs können mit einigen Handgriffen sicherer gestaltet werden. Ist das Blog bereits aktiv und die Datenbank gefüllt, kann das Ändern des Tabellenpräfix fatale Folgen haben. Trotzdem besteht auch hier die Möglichkeit, dem Standard-Präfix den Rücken zu kehren. Dazu sind diverse Schritte mit Hilfe von SQL nötig, die Sie in der dafür zuständigen Oberfläche ausführen. Alternativ kann man diesen Weg mit Hilfe eines Plugins beschreiten. Jede Änderung an der Datenbank bedarf einer Sicherung der aktuellen Datenbank im Vorfeld.

Um alle zehn Standard-Tabellen zu ändern, sind folgende SQL-Anweisungen notwendig. Habe Sie weitere Tabellen, zum Beispiel durch Plugins, müssen in der Regel auch dort die Präfixe geändert werden. Passen Sie das Beispiel „wp_i1d_“ Ihren Anforderungen an.

SQL

RENAME TABLE wp_comments to wp_i1d_comments;
RENAME TABLE wp_links to wp_i1d_links;
RENAME TABLE wp_options to wp_i1d_options;
RENAME TABLE wp_postmeta to wp_i1d_postmeta;
RENAME TABLE wp_posts to wp_i1d_posts;
RENAME TABLE wp_terms to wp_i1d_terms;
RENAME TABLE wp_term_relationships to wp_i1d_term_relationships;
RENAME TABLE wp_term_taxonomy to i1d_term_taxonomy;
RENAME TABLE wp_usermeta to wp_i1d_usermeta;
RENAME TABLE wp_users to wp_i1d_users;

Listing 4

Leider nutzt WordPress bei der Installation das vergebene Präfix auch, um einige Felder in den Tabellen „options“ und „usermeta“ eindeutig zu benennen. Daher müssen Sie auch diese Felder umbenennen.

SQL

UPDATE wp_i1d_options SET option_name = REPLACE(option_name, ’wp_’, ’wp_i1d_’);
UPDATE wp_i1d_usermeta SET meta_key = REPLACE(meta_key, ’wp_’, ’wp_i1d_’);

Listing 5

Da auch Plugins eventuell Felder mit dem Präfix anlegen können, ist es ratsam, wenn Sie nun die Datenbank nach dem alten Präfix durchsuchen und die gefundenen Werte ebenso ändern.

SQL

SELECT * FROM wp_i1d_options WHERE option_name LIKE ’wp_%’;
SELECT * FROM wp_i1d_usermeta WHERE meta_key LIKE ’wp_%’;

Listing 6

Username ändern

Der Benutzername der Standard-Installation ist admin und nicht nur Ihnen bekannt. Nach einer Installation gehört dieser Nutzer gelöscht. Sie sollten unbedingt einen neuen Administrator anlegen. Dies geschieht im Administrationsbereich und sollte die erste Tat nach dem initialen Login sein.

Damit ändern Sie nicht nur den Nutzernamen, sondern auch die ID, die nach der Erstinstallation 1 ist. Zwei Felder, die es einem Angreifer einfach machen, wenn Sie diese nicht ändern.

Möchten Sie sehr große Werte für die ID setzen, so ist die händische Variante im Backend sehr aufwändig, denn WordPress addiert bei jedem neuen Nutzer nur 1 auf. Alternativ können Sie diesen Wert auch per SQL oder mit dem Plugin „Suchen & Ersetzen“ [3] ändern.

SQL

UPDATE 'wp_users' SET 'ID' = '815' WHERE 'wp_users'.'ID' = 1;
UPDATE 'wp_usermeta' SET 'user_id' = '815' WHERE 'wp_usermeta'.'user_id' = 1;
UPDATE 'wp_posts' SET 'post_author' = '815' WHERE 'wp_posts'.'post_author' = 1;
UPDATE 'wp_links' SET 'link_owner' = '815' WHERE 'wp_links'.'link_owner' = 1;

Listing 7

WordPress-Version nicht preisgeben

Die Version von WordPress wird an vielen Stellen des Blogs ausgegeben, so im Backend, in den Feeds und im Theme. Jede Version hat ihre Eigenarten und Fehler, die potenziellen Angreifern bekannt sind.

Aus diesem Grund sollten Fremde keine Information über Ihre WordPress-Installation erhalten. Die einfachste Form, um die Versionsinformationen aus allen Bereichen (außer dem Backend) zu entfernen, ist die Nutzung des Plugins „Secure WordPress“ [4]. Alternativ genügt es, die Funktion für die Veröffentlichung der Version zu unterbinden.

PHP

add_filter( ’the_generator’, create_function(’$a’, "return null;") );

Listing 8

Fehler- und Hinweismeldungen deaktivieren

Den Backendbereich von WordPress erreicht man via Login mit Benutzernamen und Passwort. Kommt es hier zu Fehlern durch den Nutzer, gibt WordPress entsprechende Tipps, um den Login zu erleichtern. So nützlich die Information für den Anwender ist, so nützlich ist sie auch für unerwünschte Eindringlinge.

Überlegen Sie, ob Sie diese Meldungen zulassen müssen oder wollen, ansonsten können auch diese mit dem bereits erwähnten Plugin „Secure WordPress“ deaktiviert werden.

Sollte in Ihrer wp-config.php die Konstante „WP-DEBUG“ definiert sein, müssen Sie diese auf den Wert „FALSE“ setzen oder löschen, denn ansonsten werden alle Fehler in WordPress im Browser ausgegeben. Diese Konstante sollte nur im Entwicklungsumfeld von WordPress genutzt werden.

PHP

define('WP_DEBUG', false);

Listing 9

Sicherheit per .htaccess

Die Möglichkeiten mit .htaccess sind vielfältig und so kann man auch WordPress mittels .htaccess hinreichend absichern. Im Einzelnen sollten die unterschiedlichen Anforderungen dabei geprüft werden, denn nicht selten leidet die Benutzbarkeit unter den Sicherheitseinstellungen. Betrachten Sie die Sicherheit von WordPress auch aus Sicht der Nutzer, nicht nur aus der des Administrators. Ebenfalls sollten Sie die Konfiguration Ihres Webspace beachten, so dass es nicht zu Fehlern kommt.

Prinzipiell kann jedes Verzeichnis geschützt werden, dabei kommt dem Ordner „wp-admin“ eine erhöhte Bedeutung zu, denn dort sind die Dateien für den Zugriff auf das Backend hinterlegt. Der Zugriff wird über wp-login.php gesteuert und WordPress leitet immer dort hin um, egal welcher Aufruf in wp-admin unauthorisiert erfolgt. Dabei muss zusätzliche eine .htpasswd-Datei erzeugt werden, die User und Passwort enthält. Diverse Onlinegeneratoren können beim Erstellen der Dateiinhalte helfen.

PHP

# protect wp-login.php
<files wp-login.php>
AuthName "Admin-Bereich"
AuthType Basic
AuthUserFile /your_lokal_path/.htpasswd
require valid-user
</files>

Listing 10

Wie schon erwähnt, enthält die Datei „wp-config.php“ die Zugänge zur Datenbank, was sie besonders schützenswert macht. Wenige Zeilen in der .htaccess des Root helfen hierbei.

PHP

# protect wp-config.php
<files wp-config.php>
Order deny,allow
deny from all
</files>

Listing 11

Sollte die Serverumgebung eine offene Verzeichnisumgebung zulassen, empfiehlt es sich, entweder die angesprochene index.html im jeweiligen Verzeichnis abzulegen oder per „Options Indexes“ in der .htaccess den Zugriff zu sperren.

Auch die Ordner „wp-content“ und „wp-includes“ sind schützenswert. Die folgende Syntax zeigt eine einfache Variante, um den jeweiligen Ordner zu schützen.

PHP

Order Allow,Deny
Deny from all
<Files ~ "js/tinymce/*.$">
Allow from all
</Files>
<Files ~ "\.(css|jpe?g|png|gif|js)$">
Allow from all
</Files>

Listing 12

Die Dateiformate sollten also unbedingt angepasst sowie gegebenenfalls erweitert und getestet werden. Als Alternative steht Ihnen auch hier eine Plugin-Lösung bereit, die die Sicherheit stark erhöhen kann und Ihnen die Arbeit abnimmt: AskApache Password Protect [5].

Fazit

PHP und Sicherheit wurden und werden häufig im Zusammenhang diskutiert, mitunter treibt dieses Thema Web-Programmierern den Schweiß auf die Stirn. Sicherheit mit PHP ist jedoch keine „Geheimwissenschaft“, bereits mit wenigen Grundlagen kann man eine WordPress-Erweiterung sicherer machen. Auch WordPress selbst liefert dazu Funktionen. WordPress wird viel genutzt, unter unterschiedlichen Konfigurationen und PHP-Versionen, so dass man das Thema vielschichtig und komplex behandeln kann. Die vorgestellten Tipps sind einfache und fast überall umsetzbare Hinweise, die man nicht leichtfertig ignorieren sollte, wenn man sein Blog kontrolliert administrieren will.

Abonniere jetzt t3n-News über WhatsApp und bleib mobil auf dem Laufenden!
t3n-News via WhatsApp!
Vorheriger Artikel Zurück zur Startseite Nächster Artikel
4 Antworten
  1. von Frank am 06.11.2009 (11:48 Uhr)

    Zum Theme "Username ändern" möchte ich noch ergänzen, da ich hier im Artikel einen Eintrag in der Datenbank vergessen habe; eventuell kann man das im Artikel nachpflegen.

    UPDATE `wp_users` SET `ID` = '815' WHERE `wp_users`.`ID` = 1;
    UPDATE `wp_usermeta` SET `user_id` = '815' WHERE `wp_usermeta`.`user_id` = 1;
    UPDATE `wp_posts` SET `post_author` = '815' WHERE `wp_posts`.`post_author` = 1;
    UPDATE `wp_links` SET `link_owner` = '815' WHERE `wp_links`.`link_owner` = 1;

    Antworten Teilen
  2. von Florian Endres am 09.11.2009 (13:16 Uhr)

    Die Änderung wurden eingetragen. Der Code ist nun so, wie von Frank in den Kommentaren angemerkt.

    Antworten Teilen
  3. von FrankieFilm am 29.04.2010 (18:27 Uhr)

    Долго, долго искал и вот оно... случайно наткнулся на Вашу изумительную статью

    Antworten Teilen
  4. von Hier Viel mehr am 06.08.2012 (01:27 Uhr)

    Okay, meckern können wir alle. Wie wäre es mit etwas Konstruktivem, Mr. Kreativ…? Ich hätte mir am Ende des Artikels schon ein paar mehr Fakten erwünscht. So bleibt es einfach nur ein billiger Abklatsch von Weisheiten, die wir schon aus “Fight Club” kennen. Sorry. Von Leuten, die auf hohem Niveau meckern, halte ich GAR NICHTS.

    Antworten Teilen
Deine Meinung

Bitte melde dich an!

Du musst angemeldet sein, um einen Kommentar schreiben zu können.

Jetzt anmelden

Aktuelles aus dem Bereich WordPress
AnyPixel.js: Mit Googles Open-Source-Software kann jeder interaktive Displays bauen
AnyPixel.js: Mit Googles Open-Source-Software kann jeder interaktive Displays bauen

Mit AnyPixel.js hat Google eine quelloffene Lösung entwickelt, mit der ihr ungewöhnliche interaktive Displays in jeder Größe betreiben könnt. Quellcode und Hardware-Pläne hat der Suchgigant auf … » weiterlesen

Schicke WordPress-Seiten ohne Coding: Das kann das Open-Source-Plugin Elementor
Schicke WordPress-Seiten ohne Coding: Das kann das Open-Source-Plugin Elementor

Mit Elementor könnt ihr per Drag & Drop WordPress-basierte Websites zusammenklicken. Im Gegensatz zu vielen Konkurrenzprodukten steht das Tool unter einer Open-Source-Lizenz. » weiterlesen

Mit Open-Source-Software Geld verdienen: Dieser quelloffene Guide zeigt, wie’s geht
Mit Open-Source-Software Geld verdienen: Dieser quelloffene Guide zeigt, wie’s geht

Wer viel Zeit in Open-Source-Software steckt, muss damit nicht unbedingt leer ausgehen. Ein umfangreicher Guide zeigt euch, wie ihr mit quelloffener Software Geld verdienen könnt. » weiterlesen

Alle Hefte Jetzt abonnieren – für nur 35 €

Kennst Du schon unser t3n Magazin?