Sammlung: Sicherheit für das WordPress-System

Grundsätzliches

  • WordPress, die verwendeten Themes und Plugins aktuell halten (Updates einspielen).
  • Ungenutzte Themes und Plugins löschen.
  • Sichere Passwörter verwenden. In Installationen in denen viele Benutzer registriert sind, kann das Plugin Force Strong Passwords helfen.
  • Nutzern nur die Rechte zuweisen, die sie auch benötigen. Ggf. einen zusätzlichen Zugang mit eingeschränkten Rechten für redaktionelle Arbeit außerhalb des Heimnetzes nutzen.
  • Ungenutzte Nutzer-Accounts löschen oder Rolle in Abonnent ändern.

Plugin mit diversen Sicherheitsmaßnahmen

 /*
 Plugin Name: Sicherheitsmaßnahmen
 Description: Login-Fehlermeldungen verändern, Dateibearbeitungen unterbinden, WordPress-Version komplett und Aktualisierungshinweise für Nicht-Admins verbergen.
 Version: 1.0
 */
 // Login-Fehlermeldung ohne Hinweis auf falsches Passwort bzw. falschen Nutzernamen ausgeben
 function failed_login () {
 return 'Die eingegebenen Anmeldungs-Daten sind nicht korrekt.’ }
 add_filter ( 'login_errors', 'failed_login' );
// Bearbeitung von Dateien via Administrationsbereich unterbinden
 define ( 'DISALLOW_FILE_EDIT', true );
 function remove_wp_version () { return ''; }
 add_filter ( 'the_generator', 'remove_wp_version' );
// Aktualisierungshinweis nur für Admins in Singlesite-Umgebung bzw. nur für Superadmins in Multisite-Umgebung
 add_action(
 'plugins_loaded',
 function () {
 if (( is_multisite() && !current_user_can('manage_network') ) || ( !is_multisite() && !current_user_can('create_users')))  {
 add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
 add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
 add_filter( 'pre_site_transient_update_core', create_function( '$a', "return null;" ) );
 }
 }
 );
// Falls SSL verfügbar: Anmeldung über sicherere Verbindung erzwingen
// define('FORCE_SSL_ADMIN', true);

Einstellungen im Administrationsbereich

  • Unter Einstellungen > Allgemein „Jeder kann sich registrieren“ deaktivieren (WordPress MU: Unter Seite editieren „User Can Register“ Wert „0“ zuweisen)
  • Unter Einstellungen > Allgemein Standardrolle eines neuen Benutzers „Registrierter Leser“ (WordPress MU: Unter Seite editieren „Default User Role“ Wert „Subscriber“ zuweisen)

Zugriffsbeschränkungen über die .htaccess-Datei

Der Zugriff auf die Dateien .htaccess, ggf. htpasswd, wp-config.php sollte generell von außerhalb des Servers nicht nötig sein, und deswegen unterbunden werden. Die readme.html bzw. liesmich.html verrät potenziellen Angreifern die – ggf. bei noch ausstehender Aktualisierung veraltete – WordPress-Version. Das Deaktivieren der xmlrpc.php kann zusätzliche Sicherheit bringen, verhindert aber Track- und Pingpacks und den Zugriff über Drittdienste.

<FilesMatch "(.htaccess|.htpasswd|wp-config.php|readme.html|liesmich.html|xmlrpc.php)">
 order deny,allow
 deny from all
</FilesMatch>

IPs, von denen BruteForce-Attacken bekannt sind, sollten mindestens von der wp-login.php ausgesperrt werden.

<Files wp-login.php>
 Order deny,allow
 deny from 00.00.00.00
</Files>

Eine regelmäßig aktualisierte Liste „gefährlicher“ IP-Adressen gibts es im Blog von mkln.org. Die Funktion der IP-Sperre kann ggf. mit der eigenen IP überprüft werden. Alternativ bzw. erweiternd gibt es die 6G-Blacklist oder das Plugin BBQ: Block Bad Queries.

Sicherheitsrelevante Plugins

  • Die Anzahl der möglichen fehlgeschlagenen Login-Versuche kann z. B. mit Limit Login Attempts beschränkt werden.
  • Die Einbindung von Google-Fonts im Backend kann z. B. durch Disable Google Fonts verhindert werden. Das verbessert übrigens auch die Performance des Administrationsbereichs.
  • Mit dem Wordfence Security Plugin lassen sich umfangreiche Vorkehrungen treffen und etwa missglückte Logins überwachen. Auf das Limit Login Attempts-Plugin kann bei entsprechender Konfiguration dann verzichtet werden.

wp-config.php

Der Dateieditor im Administrationsbereich sollte deaktiviert werden. Gelangt ein Angreifer in den Administrationsbereich (z.B. durch ein schwaches Passwort einer Person mit Administrator-Rechten), kann er nicht über den Editor Plugins und Themes bearbeiten.

define( 'DISALLOW_FILE_EDIT', true );

Insofern SSL verfügbar ist, sollte der Login in den Administrationsbereich über SSL erzwungen werden.

define( 'FORCE_SSL_ADMIN', true );

Referenzen & Weiterführendes