Start Magazin Tipp: WordPress-Webseiten sicher machen

Tipp: WordPress-Webseiten sicher machen

298
2
Teilen

WordPress ist eines der am häufigsten verwendeten Blog-Systeme und erfreut sich durch seine einfache Installation und Handhabung einer großen Beliebtheit. Viele Betreiber machen sich allerdings wenig Gedanken um die Sicherheit des eigenen Blogs. Und da WordPress so verbreitet ist, bietet es auch umso mehr Angriffsfläche. In diesem Artikel zeige ich dir, wie du deinen WordPress-Blog absicherst.

Wichtiger Hinweis

Normalerweise würde ich dir raten, dass du niemals Code-Änderungen direkt am Live-System deines WordPress vornehmen solltest. Am Besten wäre hier eine zweite Instanz (also eine gespiegelte Testversion) deines WordPress, in der du Änderungen zuvor testen kannst. Wenn dir eine zweite WordPress-Installation nicht zur Verfügung steht, dann halte dich bitte daran, Code-Änderungen niemals über den Editor-Bereich des Dashboards von WordPress vorzunehmen. Denn wenn du einen Fehler in einer Funktion hast, und sei es nur, dass du eine Klammer vergessen hast, dann funktioniert deine WordPress-Seite anschließend nicht mehr und auch das Dashboard ist nicht mehr aufrufbar.

Daher solltest du dich am Besten immer über ein FTP-Programm mit deinem Server verbinden und die Änderungen zunächst lokal auf Deinem PC vornehmen. Dann kopierst du die geänderten Dateien per FTP auf den Server. Falls hier dann einmal etwas schief geht, kannst du immer noch die ursprüngliche Datei (von der du vorher natürlich ein Backup gemacht hast) auf den Server kopieren und die Seite funktioniert wieder.

Vorbereitung – Eigene Funktionen in einem Plugin erstellen

Wenn du ein WordPress-Theme eines Drittanbieters verwendest, kennst du das Problem: Du möchtest es an der ein- oder anderen Stelle individualisieren und findest im Internet einen Code-Schnipsel, den du in die functions.php deines Themes einfügen sollst. Soweit funktioniert das dann auch, bis es von dem Theme ein Update gibt und du mit dem Update alle deine Änderungen überschreibst.

Deshalb solltest du niemals Code-Änderungen oder -Erweiterungen am Theme selbst vornehmen. Stattdessen erstellen wir uns ganz einfach ein eigenes Plugin, in dem wir unsere eigenen Funktionen einfügen. Dazu lege einen neuen Ordner in deinem Dateisystem an. Ich nenne den Ordner wartungs-plugin. Darin erstellst du eine php-Datei mit derselben oder ähnlicher Nomenklatur. Diese php-Datei enthält erst einmal nur folgendes:

<?php
/*
 * Plugin Name: Wartungs-Plugin
 * Description: Dies ist ein Wartungs-Plugin
/*

?>

Das Plugin erscheint nun in deinem WordPress-Dashboard unter Plugins und du kannst es aktivieren. Alle darin nun enthaltenen Funktionen werden von nun an mit WordPress ausgeführt und sind für dich auch nachhaltig verfügbar.

WordPress-Version verstecken

Man sollte Angreifern immer die wenigste Angriffsfläche bieten. Dazu gehört auch die WordPress-Version für Aussenstehende zu verbergen. Wenn du dir nämlich den Seitenquelltext einer WordPress-Webseite ansiehst, findest du darin folgende Zeile:

Und genau die Information über die WordPress-Version gilt es nun zu verstecken. Öffne deine php-Datei und füge folgende Funktion hinzu, um die WordPress-Version zu auszublenden:

function wp_remove_version() {
  return '';
}
add_filter('the_generator', 'wp_remove_version');

Nachdem du die php-Datei auf den Server hochgeladen und aktiviert hast, wirst du beim Neuladen deiner Webseite erkennen, dass die Zeile mit der Version nun nicht mehr angezeigt wird.

Den Standard-Benutzer Admin deaktivieren

Es ist niemals eine gute Idee, einen vordefinierten Standard-Benutzer zu verwenden. Denn diesen kennt auch jeder Angreifer und dieser kann damit dann einfach verschiedene Passwörter ausprobieren. Daher ist es ratsam den Benutzer Admin einfach zu deaktivieren.

Wenn du allerdings in deinem Dashboard den Benutzer admin aufrufst, steht hinter dem Benutzernamen, dass dieser nicht geändert werden kann. Hier musst du dich einem kleinen Trick behelfen: Gehe in die PHPMyAdmin-Oberfläche und öffne die Tabelle wp_users. Hier klickst du bei dem Benutzer admin auf Bearbeiten und änderst die Felder user_login und user_nicename.

Hier noch ein Tipp: Du solltest dir einen eigenen Benutzer anlegen, der alle Rechte für dein WordPress besitzt und einen weiteren, der nur Authoren-Rechte besitzt. Deinem „Admin“-Benutzer vergibst du dann ein sehr aufwendiges Passwort. Denn diesen verwendest du nur, wenn du etwas an WordPress selbst wartest. Zum Schreiben von Artikel und für den alltägliche Aufgaben verwendest du einen Benutzer mit der Rolle Author oder Redakteur.

Sicherheitsschlüssel in die Config-Datei einfügen

Wenn du dich in WordPress einloggst wird dieser Login auf deinem PC in einem Cookie gespeichert. Und auf diese Verschlüsselung kannst du Einfluss nehmen. Nachdem du WordPress installiert hast öffnest du die wp-config.php. Hier findest du verschiedene Sicherheitsschlüssel definiert, deren Parameter mit „put your unique phrase here“ angegeben sind.

In dem Kommentar darüber findest du eine URL. Wenn du diese aufrufst, werden jedes Mal neue Sicherheitsschlüssel generiert. Diese kannst du kopieren und in deiner wp-config.php einfügen.

Config-Datei absichern

Normalerweise kannst du die Datei wp-config.php über www.meineURL.de/wp-config.php aufrufen. Zwar gibt sie nichts aus; aber falls dein Webserver in irgendeiner Weise kompromittiert wurde, kann hier der Quelltext durch einen Fehler evtl. doch ausgegeben werden. Und da in der Config-Datei wichtige Daten wie z.B. der Zugang zur Datenbank gespeichert werden, solltest du diese besonders absichern.

Eine Möglichkeit ist, eine .htaccess Datei zu erstellen, die wie folgt aussieht:

<?php
# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress


order allow,deny
deny from all
satisfy all

?>

Durch die Phrase deny from all ist die Datei von außen nicht mehr zugänglich, kann intern aber noch verwendet werden.

Eine weitere, bessere Möglichkeit ist, die wp-config.php einfach mittels eines FTP-Programms im Dateisystem eine Ebene höher zu verschieben:

  • Vorher: xampp/htdocs/wp-config.php
  • Nachher: xampp/wp-config.php

Somit ist die Datei gar nicht erst von außen zugänglich; WordPress allerdings schafft es, sie dennoch korrekt darauf zuzugreifen.

SSL-Verschlüsselung für deinen Admin-Bereich

Wenn du die URL www.deineURL.de/wp-admin eingibst, gelangst du zu deinem Admin-Bereich. Diesen solltest du immer mit SSL verschlüsseln, damit Dritte deinen Netzwerkverkehr nicht abschnorcheln können. Dies erledigst du ganz einfach, indem du deine wp-config.php um folgende Zeile ergänzt:

define('FORCE_SSL_ADMIN', true);

Damit wird in deinem Browser https erzwungen, auch wenn jemand nur http eingibt. Beim Aufrufen deines Admin-Bereichs erscheint nun ein Hinweis, dass das Sicherheitszertifikat der Webseite nicht vertrauenswürdig ist. Klicke hier auf Trotzdem fortfahren und du gelangst zu deinem gewohnten Login.

Fehlermeldungen auf der Login-Seite deaktivieren

WordPress ist an vielen Stellen oft viel zu geschwätzig. Wenn du beispielsweise ein falsches Passwort auf der Login-Seite des Admin-Bereichs eingegeben hast, wirst du mit einer Fehlermeldung darauf hingewiesen, dass das Passwort falsch ist. Somit weiß ein Angreifer, dass zumindest der Benutzername korrekt ist.

Und das möchten wir gerne unterbrinden. Du hast ja nun ein Wartungs-Plugin angelegt. Dieses ergänzt du nun wie folgt:

function wp_remove_login_errors() {
  return 'Ein Fehler ist aufgetreten!';
}
add_filter('login_errors', 'wp_remove_login_errors');

Hinweis: Sollte deine Seite nicht mehr funktionieren, nachdem du eine neue Funktion in deinem Wartungs-Plugin hinzugefügt hast, dann hat sich irgendwo ein Fehler in deinem Code eingeschlichen. Kommentiere nun die aktuelle Funktion einfach mit /* Dieser Code wird auskommentiert */ aus und lade sie erneut hoch. Wenn die Seite dann wieder läuft, kannst du den Fehler suchen.

Admin-Bereich mittels .htaccess mit einem zusätzlichen Passwort schützen

Der Login zum Admin-Bereich von WordPress ist ja schonmal eine gute Sache. Allerdings gibt es Tools, mit denen man hier gezielt Bruteforce-Attacken durchführen kann. Um dich besser vor Bruteforce-Attacken zu schützen ist es empfehlenswert, nicht nur den WordPress-Login zu verwenden, sondern noch einen weiteren Sicherheitslogin von deinem Webserver. Diesen realisierst du mit einer .htaccess-Datei.

Erstelle zunächst lokal auf dem PC mittels eines Texteditors eine Datei mit dem Namen .htaccess. Diese sollte wie folgt aussehen:

AuthType Basic
AuthName “Admin-Bereich”
AuthUserFile /pfad_zur_passwortdatei/.htusers
Require valid-user

Unter AuthUserFile gibst du einen Pfad zu der Datei ein, in der die Benutzernamen und Passwörter hinterlegt sind, die für diesen Login gelten sollen. Erstelle nun in deinen Texteditor die Datei .htusers. Diese sollte wie folgt aussehen:

andy:passwort

Wenn deine Webseite auf einem Windows Betriebssystem betrieben wird, muss das Passwort hier in Klartext stehen. Unter Linux erstellst du dir an dieser Stelle ein verschlüsseltes Passwort. Dazu rufst du den htpasswd-Generator auf. Nachdem du hier dein MD5-Passwort erzeugt hast, kopiere es in die Datei .htusers und ersetzte die Zeichenketten passwort damit.

Die Datei .htusers solltest du nun auf deinem Webserver an einem Ort ablegen, den man per Browser nicht erreichen kann; also außerhalb deiner Webseite. Den Pfad der AuthUserFile gibst du dann absolut an, z.B.:

  • Linux: /var/.htusers
  • Windows: c:\xampp\.htusers

Du kannst diese .htaccess Datei nun an jenen Stellen auf deiner Webseite ablegen, die du mit einem Login schützen möchtest. Die .htaccess-Datei schützt immer das jeweils aktuelle Verzeichnis, in dem die Datei liegt, sowie alle Unterverzeichnisse darunter.

Login-Versuche begrenzen

Wenn ein Angreifer versucht in dein WordPress einzudringen, wird er vermutlich einige Usernamen/Passwort-Kombinationen durchprobieren. Damit dies nicht ohne weiteres möglich ist, kannst du mittels eines Plugins festlegen, dass der Login auf deiner Admin-Seite nach X falschen Login-Versuchen für eine gewisse Zeit gesperrt wird.

Dazu gehst du in WordPress auf Plugins und gibst bei der Suche Limit Login ein und suchst dir ein Plugin heraus. Wir haben das Plugin von Johan Eenfeldt verwendet, da es sehr kleingewichtig daherkommt.

Nachdem das Plugin installiert und aktiviert ist, findest du links im Menü unter Einstellungen den Punkt Limit Login Attempts. Hier kannst du einstellen, wie oft ein Fehl-Login stattfinden darf und wie lange der Login nach Falscheingabe gesperrt werden soll. Auch kannst du dich bei Fehlversuchen per E-Mail informieren lassen.

Fazit

Du kannst natürlich noch einiges mehr tun, um deine WordPress-Webseite abzusichern. Beispielsweise gibt es Plugins, mit denen du eine 2-Faktor-Authentifizierung beim Login des Admin-Bereichs einstellen kannst. Wenn du alleine auf dein WordPress zugreifst und immer dein Smartphone in der Nähe hast, ist das auch keine schlechte Idee. Greifen mehrere Authoren auf die Webseite zu, könnte das allerdings eher hinderlich sein.

Auch ist es keine schlechte Idee den Pfad des Admin-Bereichs (/deinewebseite.de/wp-admin/) zu ändern. Bei Blogs, die bereits produktiv betrieben werden, erfordert das einige Anpassungen. Aber auch hier gibt es Plugins, die diesen Pfad virtuell ändern. Weiterhin gibt es noch einige Sicherheits-Plugins, die evtl. einen zusätzlichen Blick wert sind.

Das Wartungs-Plugin stelle ich dir hier gerne zum Download bereit. Du kannst die Zip-Datei einfach in deiner Plugin-Rubrik auswählen und installieren.

Falls du noch mehr Tipps zu WordPress-Sicherheit hast oder Ideen, wie wir den Artikel noch ergänzen können, dann lass es uns gerne in den Kommentaren wissen.

  • Karl Gauss

    Praktikabler als den Admin Login mit einem .htaccess Password zu sichern, ist es ein Captcha Plugin zu installieren.

  • Hi Karl, ein Captcha-Plugin schränkt aber doch auch nur die möglichen Login-Versuche ein. D.h. durch die Verwendung von Captchas ist es nicht mehr möglich automatisierte Login-Versuche durchzuführen. Mittels .htaccess setzt Du aber auf einen extra Schutz vom Webserver und verlässt Dich nicht ausschließlich auf den Login-Schutz von WordPress selbst.