5 Tipps: Mehr Sicherheit für WordPress

Mit wenigen einfachen Mitteln lässt sich WordPress ein ganzes Stück sicherer machen.


WordPress Sicherheit

WordPress Sicherheit

WordPress ist in aktuellen Erhebungen das am weitest verbreitete Content Management System, fast 17% aller Websites weltweit setzen WordPress als CMS ein; Open Source und dann noch mit tollen Funktionen ausgestattet und mit tausenden Plugins und Themes aufzubohren, das macht WordPress für viele Anwender interessant. Was aber für den Erfolg von WordPress spricht, das stellt für viele Anwender auch ein großes Sicherheitsrisiko dar.

Wie auch ein erfolgreiches Betriebssystem aus Redmond ist auch WordPress “dank” seiner Popularität von vielen Sicherheitsrisiken bedroht, tagtäglich werden tausenden Blogs und Firmenwebsites von Angreifern infiltriert. Die eigene WordPress-Installation anzusichern gehört damit zu den ersten und wichtigsten Aufgaben eines jeden Anwenders.

WordPress mit einfachen Mitteln sicherer machen

Ich möchte daher auf 5 kleine und relativ einfache Möglichkeiten verweisen, mit denen man WordPress sicherer machen kann. Ein Hinweis aber: Bevor ihr diese Änderungen umsetzt, sollte auf jeden Fall ein vollständiges Backup von Datenbank und allen Dateien gemacht werden!

1. Backend (wp-admin) per .htaccess schützen

Apache-Server bieten eine sehr entspannte Möglichkeit, einzelne Dateien und Verzeichnisse zu sichern: Per .htaccess und .htpasswd muss der Zugriff auf diese Dateien und Verzeichnisse dann über eine zusätzliche Passwort-Abfrage bestätigt werden. Diese zusätzliche Sicherung ist auch relativ einfach durchzuführen:

  1. .htaccess anlegen
    Lege in dem “wp-admin”-Ordner eine .htaccess an, die du mit folgendem Inhalt füllst:

    AuthName "Adminschutz"
    AuthType Basic
    AuthUserFile /pfad/zur/passwortdatei/.htpasswd
    require valid-user
    • AuthName ist im Prinzip nur die Bezeichnung des Passwort-Schutzes; Diese Bezeichnung wird dann auch in der Passwort-Abfrage im Browser angezeigt.
    • AuthType: Zeigt die Stärke der Sicherung an. Basic ist ausreichend.
    • AuthUserFile: Zeigt den Pfad zur .htpasswd an, dazu kommen wir gleich. Hierbei sollte der relative Pfad zur Datei angegeben werden, damit der Server die auch auf jeden Fall findet.
    • require valid-user: Es wird nur derjenige Nutzer reingelassen, der tatsächlich in der .htpasswd hinterlegt ist.
  2. .htpasswd erstellen
    In dieser Datei (die dort liegt, wo du sie in der .htaccess angegeben hast) werden sowohl dein Benutzername, als auch dein Passwort gespeichert; Das Passwort aber nicht im Klartext, deshalb solltest Du diesen Generator nutzen, um die Angaben zu erzeugen. Das sieht dann etwa so aus:

    test:$6$RANiD0QF$F6cVNYPgmq92f8pH5LIumompjON6C8m1L7XHU4WqfsIOsqiZpM.otLZMCWgbuUEW6bcsFsQQUhamMXFUxNn480

Das war’s schon: Dein wp-admin-Verzeichnis ist nun über eine zusätzliche Passwort-Abfrage besser geschützt. Das Passwort musst du jedes Mal dann neu eingeben, wenn der Browser neu geöffnet wird. Geschlossene Tabs merkt sich der Browser als bereits verifiziert.

Quelle: Christian Reifferscheid

2. Tabellen-Prefix ändern

Tabellen-Präfix ändern

Tabellen-Präfix ändern

In der Standard-Einstellung einer jeden neuen WordPress-Installation schlägt der Installationsassistent “wp_” als Tabellenpräfix vor. Und weil diese Einstellung vermutlich 99,9% aller WordPress-Nutzer einfach so übernehmen, ist das ein echtes Problem. Denn man sollte eine durchaus kompliziertere Variante nutzen, beispielsweise so etwas wie “asdf4456_”; Also eine Kombination, die deutlich vom Standardwert abweicht. So lässt sich die Datenbank etwas besser vor nicht-genehmigten Zugriffen schützen.

Bei einer Neuinstallation ist das Ändern des Tabellen-Prefix auch kein großes Problem: Da reicht das Eintragen eines komplizierteren Präfixes in der wp-config.php und die Angabe dieses Präfixs im Installationsassistenten und die Tabellen werden dann genau mit diesem Präfix eingerichtet.

Komplizierter wird es dann, wenn die WordPress-Installation schon lang besteht und das Prefix im Nachhinein geändert werden soll. Eine einfache Änderung in der wp-config.php würde hier nicht reichen, auch die bestehenden Datenbankinhalte müssen geändert werden. Bevor ihr diesen Schritt durchführt, möchte ich daher noch einmal an das hierbei lebensnotwendige Backup erinnern.

Angabe in der wp-config.php ändern

Als erstes müsst ihr die Angabe in der wp-config.php ändern. Macht aus (dem Standardwert)

$table_prefix  = 'wp_';

beispielsweise:

$table_prefix  = 'asdf4456_';

Merkt euch diese Kombination für die weiteren Schritte gut!

Änderung der Datenbank-Tabellen

Eine Standardinstallation unter WordPress besteht aus insgesamt 11 Tabellen. Vor jeder dieser Tabellen steht das in der Installation gewählte Präfix, ungünstigerweise also meistens dann “wp_”. Das muss jetzt geändert werden, weil nach der Änderung in der wp-config.php WordPress die Tabellen nicht mehr finden kann. Wer will kann diese Änderung per Hand durchführen, einfacher und schneller geht es aber mit einem SQL-Befehl. Tragt dazu im SQL-Befehlsfeld folgende Zeilen ein:

RENAME table 'wp_commentmeta' TO 'asdf4456_commentmeta';
RENAME table 'wp_comments' TO 'asdf4456_comments';
RENAME table 'wp_links' TO 'asdf4456_links';
RENAME table 'wp_options' TO 'asdf4456_options';
RENAME table 'wp_postmeta' TO 'asdf4456_postmeta';
RENAME table 'wp_posts' TO 'asdf4456_posts';
RENAME table 'wp_terms' TO 'asdf4456_terms';
RENAME table 'wp_term_relationships' TO 'asdf4456_term_relationships';
RENAME table 'wp_taxonomy' TO 'asdf4456_taxonomy';
RENAME table 'wp_usermeta' TO 'asdf4456_usermeta';
RENAME table 'wp_users' TO 'asdf4456_users';

Gleiches muss übrigens auch noch für die Tabellen gemacht werden, die durch Zusatzplugins erstellt wurden. Geht hierbei nach dem gleichen Schema vor.

Reste in _options und _usermeta finden

Je nachdem wie viele Plugins ihr eingesetzt habt und wie viel Unsinn die gemacht haben, lohnt sich ein tieferer Blick in die Tabellen, ob dort noch irgendwo auf die veralteten Tabellen-Präfixe verwiesen wird. Insbesondere die ehemals wp_options und wp_usermeta sind davon stark betroffen. Ihr müsst daher in diesen Tabellen nach Einträgen suchen, die noch die alten Angaben beinhalten und diese von Hand ändern. Damit es wieder leichter geht, gibt es dafür zwei kleine, nette SQL-Abfragen:

  1. SELECT * FROM 'asdf4456_options' WHERE 'option_name' LIKE '%wp_%'
  2. SELECT * FROM 'asdf4456_usermeta' WHERE 'meta_key' LIKE '%wp_%'

Diese Schritte solltet ihr auch durchaus nacheinander und nicht gleichzeitig ausführen.

Im Fall, dass nun irgendwas nicht mehr funktioniert, solltet ihr die Schritte für die anderen Tabellen (in denen aber eigentlich nichts versteckt sein dürfte) nachholen. Funktioniert der Blog immer noch nicht, einmal den Cache leeren. Gibt es danach immer noch eine Fehlermeldung, habt ihr ja erst einmal noch das Backup. ;-)

(Eine von vielen) Quelle(n): Webroyals Blog

3. Meta-Angabe “Generator” entfernen

Generator: WordPress

Generator: WordPress

WordPress gibt standardmäßig im Quelltext als Generator-Meta-Angabe “WordPress” sowie die Versionsnummer an. Für Angreifer wird ein Blog damit zum leichten Ziel, wenn für eine bestimmte Version Sicherheitslücken bekannt sind. Ich empfehle daher grundsätzlich, die Meta-Angabe ganz zu entfernen.

Was vor einigen Jahren noch mit viel Aufwand verbunden war, kann heute mit nur einer Angabe in den Theme-Funktionen (functions.php im Theme-Verzeichnis) gelöst werden:

remove_action('wp_head', 'wp_generator');

Übrigens: Falls in den Theme-Funktionen noch keine anderen Funktionen und Anpassungen hinterlegt werden, gehört natürlich auch ein

<?php

sowie

?>

dazu! ;-)

Quelle: WordPress Support-Forum

4. Login-Fehlermeldungen verstecken

Login-Fehlermeldungen

Login-Fehlermeldungen

Wer sich in das WordPress-Backend mit falschen Zugangsdaten einloggt, der bekommt dafür eine Fehlermeldung angezeigt. Was eigentlich ein netter Dienst ist, kann allerdings zum Problem werden. Denn WordPress gibt damit indirekt Auskunft darüber, ob ein Benutzer existiert oder nicht. Die Fehlermeldung erleichtert es Angreifern somit indirekt, Informationen über die Benutzer einer Installation zu erhalten.

Daher sollten diese Informationen komplett entfernt werden. Auch in diesem Fall reicht ein kleiner Eintrag in den Theme-Funktionen (functions.php im Theme-Verzeichnis):

add_filter( 'login_errors', create_function( '$a', "return null;" ) );

Nach Einbau dieses Code-Schnipsels zeigt WordPress zwar noch einen Hinweis, dass etwas nicht stimmt. Was genau der Fehler ist, können Dritte aber dann nicht mehr einsehen.

Quelle: Frank Bültge

5. Autor als CSS-Klasse entfernen

Autor als CSS-Klasse

Autor als CSS-Klasse

Rückschlüsse auf vorhandene Benutzer einer WordPress-Installation können Angreifer jedoch noch an anderer Stelle ziehen: WordPress gibt den Benutzernamen eines angemeldeten Kommentators standardmäßig als CSS-Klasse an.

Auch diese Information sollte man daher verstecken und kann das auch mit wenigen Zeilen Code in den Theme-Funktionen (functions.php im Theme-Verzeichnis) tun:

function sec_remove_comment_author_class( $classes ) {
foreach( $classes as $key =&gt; $class ) {
if(strstr($class, "comment-author-")) {
unset( $classes[$key] );
}
}
return $classes;
}
add_filter( 'comment_class' , 'sec_remove_comment_author_class' );

Quelle: Dr. Web

Fazit

Eigentlich sagt dieser Beitrag nicht viel neues: Wie ihr an den Quellen sehen könnt, sind das alles bekannte Kniffe um WordPress ein bisschen sicherer zu machen. Unzählige Autoren haben diese Tipps schon aufgelistet und ihre Leser auf die Dringlichkeit der Absicherung hingewiesen. Das Problem nur: Leider längst nicht alle WordPress-User befolgen diese Tipps auch. Und ich gebe zu: Auch ich bin manchmal etwas nachlässig, wenn es um die Absicherung einer WordPress-Installation geht.

Das Problem aber bleibt: WordPress ist für Angreifer ein beliebtes und manchmal auch leichtes Ziel. Mit diesen fünf kleinen Änderungen könnt ihr eure WordPress-Blogs aber ein wenig sicherer machen. Regelmäßige Backups ersetzt das aber nicht! ;-)

Wie sind eure Erfahrungen mit der WordPress-Sicherheit? Und was sollte man unbedingt tun? Gibt es vielleicht noch Tipps, die in dieser Zusammenstellung unbedingt vertreten sein sollten?

Adrian Korte

Adrian Korte hat bisher 1 Beiträge auf seo4wp.de veröffentlicht..

Seit einigen Jahren bin ich bereits im Internet aktiv und beschäftige mich auf wpLove intensiv mit WordPress. Neben kleinen SEO-Experimenten, liegt mir zudem vor allem das Affiliate-Marketing am Herzen, auf GeldimWWW.de versuche ich seriöse Wege zum Geld verdienen im Internet aufzuzeigen.

Schlagworte:, , , , , , , , , ,

8 Antworten zu “5 Tipps: Mehr Sicherheit für WordPress”

  1. 30. Juli 2012 um 09:21 #

    Klasse Beitrag. Auch wenn ich lange nicht alle Hinweise hier nutze überlege ich doch das ein oder andere Umzusetzen. Danke dafür!

    • 30. Juli 2012 um 10:05 #

      Das Umsetzen aller Tipps lässt sich in etwa 30 Minuten bewerkstelligen und beruhigt das Gewissen ungemein. ;-)

  2. 30. Juli 2012 um 09:50 #

    Sehr gut. Ich bin ja immer dafür, lieber Codeschnipsel als Plugins zu verwenden, um WordPress zu verbessern oder anzupassen.
    Einige der hier angesprochenen Verfahren werden auch von diversen Plugins umgesetzt. Es geht also auch ohne.

    Nur den Tabellen-Prefix nachträglich ändern – da traue ich mich irgendwie nicht so wirklich ran. Weder mit Plugin noch manuell.

  3. 30. Juli 2012 um 13:43 #

    Hi Adrian,

    tolle Tipps. Danke :) Da fühlt man sich doch gleich etwas “sicherer”.

    Was ich noch empfehlen kann, folgendes Plugin zu installieren:

    http://bit.ly/MWsLq5

    Da ziemlich viele alte Themes noch Sicherheitslücken durch die timthumb.php auslösen.

    Viele Grüße,
    Marcel

    • 30. Juli 2012 um 20:03 #

      Ich habe dafür noch einen besseren Tipp: Einfach besser ganz auf TimThumb verzichten! ;-)
      Die integrierte Thumb-Funktion bei WordPress ist besser, einfacher umzusetzen und sicher!

  4. 7. August 2012 um 14:48 #

    Stimmt auch wieder :) Aber die meisten Themes haben es schon eingebunden. Das wäre doch was für ein Tutorial oder? *g*.

    Mach weiter so Adrian, lese deinen Blog echt gerne!

    Viele Grüße aus Berlin,
    Marcel

  5. Martin
    10. September 2012 um 19:48 #

    Hallo,
    danke, das mit dem Benutzernamen als CSS-Klasse war für mich neu. Warum ist WP so “dumm”, den Benutzernamen auf diese Weise zu verraten? Ich kann es kaum glauben; das heißt, dass all jene, die den Tipp beherzigen, nicht das Standard-Admin beim Installieren zu übernehmen, sich das genauso gut sparen könnten, oder? Zumindest bei einem Blog mit Kommentaren

    Grüße,

    Martin

Trackbacks/Pingbacks

  1. 13-Wochen-Projekt: Woche 3 » GeldimWWW.de - 30. Juli 2012

    [...] 1 Gastartikel auf anderem Blog veröffentlichen [...]

Einen Kommentar hinterlassen