WordPress Sicherheit erhöhen ohne Plugins

Ich bin der Meinung, dass man die Sicherheit von WordPress auch ohne Plugins erhöhen kann. Oder andersherum: Hackern und automatisierten Angriffen das Leben schwerer machen. Wie das geht, werde ich hier beschreiben.

Eins vorweg: Wenn man keine sicheren Passwörter verwendet, nützt einem auch die beste Absicherung nichts. Und das gilt nicht nur für deinen WordPress Zugang, sonder für alle Zugangsmöglichkeiten zu Webspace (FTP, SSH, MySQL, …). Außerdem bietet heute nahezu jeder Hoster die Möglichkeit Daten verschlüsselt zu übertragen. Insbesondere bei E-Mail oder FTP.

Die Installation:

Ich habe WordPress in einem unter Ordner installiert.  Ich bin der Meinung, wenn man diese Art der Installation wählt, hat ein automatisierter Angriff es zumindest etwas schwerer den WordPress Ordner zu finden. Außerdem finde ich es etwas aufgeräumter, da ich in dem Root Ordner noch weitere Dienste installiert habe, damit ich sie alle mit einem https Zertifikat nutzen kann. Dazu kommt noch, dass ich den „wp-content“ Ordner umbenannt habe.

Um den „wp-content“ Ordner umzuebnen, bedarf es zwei Einträge in der „wp-config.php“.

define( 'WP_CONTENT_DIR', realpath( dirname(__FILE__) . '/../content' ) );
define( 'WP_CONTENT_URL', 'https://danielhuesken.de/content' );

Dies sollten heute alle Plugins unterstützen.

Zusätzliche Absicherungen:

.htaccess im Root (Haupt) Ordner.

<FilesMatch "(.htaccess|readme.html|liesmich.html|license.txt|license.md|readme.txt|readme.md|wp-config.php)">
 Deny from all 
</FilesMatch>
php_flag display_errors off

Der „FilesMatch“ Eintrag sorgt dafür, dass auf die Dateien in der Liste nicht direkt über eine URL zugegriffen werden kann. Hier sind auch die Readme Dateien enthalten, damit man darüber nicht erkennen kann, ob etwas vorhanden ist oder sogar die Version herausbekommt.

Die letzte Zeile sorgt dafür, dass PHP keine Fehlermeldungen ausgibt und man somit den Server Pfad nicht in Erfahrung bringen kann.

Im neuen „Content“ Ordner habe ich eine zusätzliche .htaccess liegen mit folgenden Einträgen.

<Files *.php>
 order allow,deny
 deny from all
</Files>
<Files debug.log>
 Order allow,deny
 Deny from all
</Files>

Das sorgt dafür, dass keine .php Dateien mehr direkt im „Content“ Ordner aufgerufen werden können. Allerdings muss hier getestet werden, ob auch alle Plugins und Themes damit funktionieren. Gute Plugins und Themes sollten aber kein Problem damit haben. Alle anderen Dateiformate können weiterhin direkt aufgerufen werden.

WordPress verschleiern:

Mit diesem Stück Code kann man noch einiges im HTML Kopf der Website verbergen oder dekatieren. Dieser kann in die funktions.php eures Child Themes geschrieben werden oder eben doch in ein Kleins Plugin. Hier bitte selber entscheiden, was ihr braucht oder nicht. Der wichtigste Punkt ist hier der „wp_generator“ da dieser auf jeder Seite im HTML  folgendes im Kopf hinzufügt <meta name="generator" content="WordPress 4.1" />.

// Head cleanup
function dh2015_head_cleanup() {
   // category feeds
   //remove_action( 'wp_head', 'feed_links_extra', 3 );
   // post and comment feeds
   //remove_action( 'wp_head', 'feed_links', 2 );
   // EditURI link
   remove_action( 'wp_head', 'rsd_link' );
   // windows live writer
   remove_action( 'wp_head', 'wlwmanifest_link' );
   // index link
   remove_action( 'wp_head', 'index_rel_link' );
   // previous link
   remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );
   // start link
   remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );
   // links for adjacent posts
   remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
   // WP version
   remove_action( 'wp_head', 'wp_generator' );
}
add_action( 'init', 'dh2015_head_cleanup' );

Anmerkung:

Darüber hinaus sollten natürlich auch das nicht benutzen des Standard DB Präfixes und das Rechte setzen der Ordner Berechtigungen nicht fehlen. Es gibt einen Artikel auf WordPress.org über das abhärten von WordPress der auch durchgegangen werden sollte.


Kommentare

6 Antworten zu „WordPress Sicherheit erhöhen ohne Plugins“

  1. Danke für den interessanten Artikel. Es ist natürlich eine gute Möglichkeit den WordPress Blog ohne (zusätzliche) Plugins zu sichern, denn viele instllierte Plugins gehen ja bekanntlich auf Kosten der Performance der Webseite.

  2. super Artikel wo es endlich mal nicht um security plugins geht!
    Danke dafür 🙂

  3. Hallo Daniel, toller Artikel!!
    Wie lässt sich am einfachsten der Theme Name des eingesetzten Themes verbergen oder umbennen, sodass bei Theme Detectoren kein Hinweis auf das verwendetet Theme ausgegeben wird?
    Ich möchte nicht, dass jeder bei Theme Detectoren nachschauen kann, welches Theme ich einsetze und das es ein WordPress Theme ist(wegen der Sicherheit).
    Ich benutze neben dem Parent Theme auch ein Child Theme.
    Es wäre wirklich super, wenn Du mir weiter helfen könntest, welchen Code ich wo eingeben muss oder welche Änderung ich einstellen soll!!!
    Danke!!

    1. Hallo Paul,

      ich denke das wird nicht so einfach möglich sein. Da die Detektoren nur die css Dateien auslesen müssen. Du kannst natürlich mal versuchen die Theme Verzeichnisse um zu benennen. Allerdings ist das auch nicht sicher da man das Verzeichnis über Umwege immer herausfinden. Du kannst auch versuchen das Teme selber um zu benennen allerdings gehen die Einstellungen alle verloren dabei. Du kannst das also nicht wirklich „sicherer“ machen.

  4. Hallo Daniel,
    vielen Dank für Deinen Beitrag. Er hat mir weitergeholfen meine WordPress-Installation ohne viele Plugins sicherer zu machen.
    Danke.
    Viele Grüße

  5. Hallo Daniel, danke für die Tipps. Die von Dir genannten Möglichkeiten unter „WordPress verschleiern“ kannte ich noch nicht. Werde ich definitiv ausprobieren!

    Ich habe ebenfalls über einige Methoden gebloggt, wie man seine WordPress-Instanz ohne den Einsatz von Plugins über die .htaccess absichern kann. http://www.wplove.de/sicherheit/wordpress-sicherheit-8-ultimative-snippets-fuer-die-htaccess/2127/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert