Kategorie: Code-Snippets

Open Graph Informationen für Facebook

header.php

<meta property="og:title" content="<?php if ( is_home() ) {  } else {  if ( is_archive() ) { echo(''); } if (  is_search() ) { echo('Suchergebnisse f&uuml;r &quot;'); echo($s); echo('&quot; – '); } else { wp_title(' - ',true,'right'); } } ?><?php bloginfo('name'); ?>" />
<meta property="og:url" content="<?php echo get_permalink(); ?>" />
<meta property="og:description" content="<?php bloginfo('description');  ?>" />
<meta property="og:image" content="http://url/image.jpg" />

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.
  • Den Datenbank-Präfix wp_ ändern bzw. bereits bei der Installation entsprechend anpassen.

Nutzernamen, -rollen & Passwörter

  • Keine Nutzernamen wie webmaster, admin, login etc. verwenden, da sonst der erste Schlüssel zum Einbruch auf der Hand liegt. Derartige Nutzerzugänge ggf. durch andere ersetzen. Ggf. Admin-Login mittels E-Mail-Adresse realisieren.
  • Sichere Passwörter verwenden. In Installationen in denen viele Benutzer registriert sind, können die Plugins Force Strong Passwords und Force Password Change 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() &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

Zwar besteht die Möglichkeit, die wp-config.php außerhalb des WordPress-Basisverzeichnis zu hinterlegen. Dies wird bei Stackexchange jedoch als wenig zielführend erachtet. Weiterhin zu beachten.

Die Sicherheitsschlüssel („Salt“) sollten generiert und gegen die Standardwerte ausgetauscht werden.

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

Shortcode erstellen

Erstellen einer Funktion in der functions.php des benutzten Themes. Wichtig: Die Funktion muss eine Zeichenkette wiedergeben (also kein echo). Die Funktion kann Argumente $args mit einem Wert $key aufnehmen.

function new_shortcode($args) {
 // $args = array('key1' => 'value1', 'key2' => 'value2')
 $return = '';
 // Die Zeichenkette, die ausgeführt werden soll.
 return $return;
 }// Den Shortcode aktivieren
 add_shortcode('shortcode_name', 'new_routine');

Und so kann der Shortcode dann in Beiträge eingefügt und befüllt werden:

[shortcode_name key1="value1" key2="value2"]

Referenz Referenz