Mögliche Zeichenanzahl der Überschrift im Editor begrenzen

Plugin

// Zeichenzahl Überschrift begrenzen
 add_action('publish_post', 'title_max_char');
 function title_max_char() {
 global $post;
 $title = $post->post_title;
 $num_char = count(count_chars($title));
 $id = $post->ID;
 $url = $bloginfo->url;
 if (strlen($title) >= 80 )
 wp_die( "Bitte finde einen aussagekr&auml;ftigen Titel, der aus maximal 80 Zeichen besteht. Derzeit besteht er aus $num_char Zeichen.<br /><br />
 <a href="$url/wp-admin/post.php?post=$id&action=edit">Zur Bearbeitung zur&uuml;ck</a>." );
 }
  • Unter strlen($title) >= 80 kann die maximale Zeichenzahl angepasst werden.
  • Referenz

Framebreaker über functions.php und wp_head

Verhindert die Anzeige des Inhalts in Frames (sog. Framebreaker).

Plugin

// Framebreaker
 function framebreaker() {
 if (!is_preview()) {
 echo "n<script type="text/javascript">";
 echo "n<!--";
 echo "nif (parent.frames.length > 0) { parent.location.href = location.href; }";
 echo "n-->";
 echo "n</script>nn";
 }
 }
 add_action('wp_head', 'framebreaker');

Referenz

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.
  • 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() &amp;&amp; !current_user_can('manage_network') ) || ( !is_multisite() &amp;&amp; !current_user_can('create_users')))  {
 add_action( 'init', create_function( '$a', &quot;remove_action( 'init', 'wp_version_check' );&quot; ), 2 );
 add_filter( 'pre_option_update_core', create_function( '$a', &quot;return null;&quot; ) );
 add_filter( 'pre_site_transient_update_core', create_function( '$a', &quot;return null;&quot; ) );
 }
 }
 );
// 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