smart | Webentwicklung
Alles rund um HTML5, PHP, WordPress & Co.

16 Tipps zur Erhöhung der Sicherheit von WordPress

24. April 2012
Stephan
WordPress

WordPress ist unter Bloggern eine beliebte und häufig verwendete Open-Source Blog-Software. Aufgrund dieser Tatsache ist es auch ein lohnendes Angriffsziel für Hacker, Script-Kiddies etc. und deshalb sollte man als WordPress-Blogger auch ein Auge auf die Sicherheit des eigenes Blogs werfen.

Im folgenden Artikel sind einige Tipps aufgeführt, die helfen die Sicherheit eures WordPress-Blogs zu erhöhen und es so den Angreifern schwerer zu machen.

Tipp 1: Sicheren Benutzernamen verwenden

Bei der Installation von WordPress wird standardmäßig „admin“ als Benutzername vorausgewählt. Da dieser Benutzername leicht zu erraten ist, sollte dieser direkt bei der Installation geändert werden. Dabei solltet ihr beachten, dass ihr ein Pseudonym wählt und nicht euren realen Namen als Benutzernamen verwendet, weil den potenzielle Angreifer z.B. durch einen Blick in euer Impressum sonst schnell herausfinden könnten.

Für den Fall, dass ihr bei der Installation doch den Benutzernamen „admin“ belassen habt, könnt ihr diesen nachträglich in eurer Datenbank ändern:

UPDATE 
	wp_users 
SET 
	user_login = 'Pseudonym' 
WHERE 
	user_login = 'admin';

Tipp 2: Sicheres Passwort verwenden

Analog zum Benutzernamen sollte auch das Passwort nicht zu simpel sein. Idealerweise wählt ihr ein Passwort mit einer Mindestlänge von 8-10 Zeichen und nutzt Groß- & Kleinbuchstaben, Zahlen und vorzugsweise auch noch Sonderzeichen.

Tipp 3: User-ID des Admin-Accounts ändern

Im Normalfall hat der Admin-Account immer die User-ID „1“, was auch potenzielle Angreifer wissen. Die User-ID lässt sich aber auch nachträglich direkt in der Datenbank ändern:

UPDATE wp_users SET ID = '471' WHERE wp_users.ID = 1;
UPDATE wp_usermeta SET user_id = '471' WHERE wp_usermeta.user_id = 1;
UPDATE wp_posts SET post_author = '471' WHERE wp_posts.post_author = 1;
UPDATE wp_links SET link_owner = '471' WHERE wp_links.link_owner = 1;

Die Tabellennamen müsst ihr gegebenenfalls anpassen, falls ihr einen individuellen Tabellen-Präfix nutzt (siehe Tipp 4).

Tipp 4: Tabellen-Präfix ändern

Standardmäßig ist der Tabellen-Präfix in WordPress wp_. Bevor ihr WordPress installiert, solltet ihr in der Datei wp-config.php einen individuellen Tabellen-Präfix angeben:

// Beispiel für angepassten Tabellen-Präfix
$table_prefix  = 'wp_x7Df3_';

Für den Fall, dass ihr WordPress schon installiert habt, könnt ihr im Nachhinein die Tabellennamen in der Datenbank auch manuell anpassen:

RENAME TABLE wp_commentmeta to wp_x7Df3_commentmeta;
RENAME TABLE wp_comments to wp_x7Df3_comments;
RENAME TABLE wp_links to wp_x7Df3_links;
RENAME TABLE wp_options to wp_x7Df3_options;
RENAME TABLE wp_postmeta to wp_x7Df3_postmeta;
RENAME TABLE wp_posts to wp_x7Df3_posts;
RENAME TABLE wp_terms to wp_x7Df3_terms;
RENAME TABLE wp_term_relationships to wp_x7Df3__term_relationships;
RENAME TABLE wp_term_taxonomy to wp_x7Df3__term_taxonomy;
RENAME TABLE wp_usermeta to wp_x7Df3__usermeta;
RENAME TABLE wp_users to wp_x7Df3__users;

Dir Änderung in der wp-config.php muss aber trotzdem vorgenommen werden.

Die Frage, ob die Änderung des Tabellen-Präfix überhaupt zur Sicherheit beiträgt, sei mal dahingestellt. Hierzu auch ein passender Artikel von Klaus: Erhöhung der Sicherheit durch ändern des Tabellenpräfix?

Tipp 5: Hinweise beim Login unterdrücken

Wenn ihr euch im Backend von WordPress anmeldet und einen falschen Benutzernamen oder ein falsches Passwort eingibt, dann informiert euch WordPress darüber mit einer roten Hinweisbox:

WordPress unsicheres Login mit Fehlerhinweisen

Angreifer wüssten jetzt bereits, dass der Benutzername korrekt ist und nur noch das Passwort falsch ist. Um diese Hinweise zu unterdrücken, könnt ihr Folgendes in eure functions.php einfügen:

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

Danach werden keine Hinweise mehr angezeigt, sondern nur noch eine leere Hinweisbox:

WordPress sicheres Login ohne Fehlerhinweise

Tipp 6: SSL für Login verwenden

Damit eure Login-Daten (Benutzername & Passwort) nicht im Klartext übertragen werden, ist es möglich das Login über SSL laufen zu lassen. Weiterhin besteht noch die Möglichkeit, dass sowohl das Login als auch die ganze Admin-Session über SSL läuft. Letzteres kann jedoch zu Performanceproblemen führen. Für die Verwendung einer solchen sicheren SSL-Verbindung müsst ihr in der wp-config.php Folgendes eintragen:

// SSL nur für Login - braucht nicht eingetragen werden, wenn
// 'FORCE_SSL_ADMIN' verwendet wird
define('FORCE_SSL_LOGIN', true);
// SSL für Login & gesamte Admin-Session
define('FORCE_SSL_ADMIN', true);

Erwähnt sei noch, dass euer Webhoster SSL für euer Webpaket bzw. Server unterstützen muss.

Tipp 7: Sicherheitsschlüssel verwenden

In der wp-config.php könnte ihr sogenannte Sicherheitsschlüssel definieren:

define('AUTH_KEY',         '=LS]T?.ztJF</WS-oKz8gJc8iofo+$VjfR)bsj<Nb |6Y/`2kY1yf$qrd0~5*FrW');
define('SECURE_AUTH_KEY',  '^}<MY?Jt:6@c:@3f60U>f;mM1{@rx>sB(8d`HN^J{+C2sF)m;JAWA>l{UHld PB{');
define('LOGGED_IN_KEY',    'Y~@3?(,;^jO$?BPvt`R}o|!?!5;(*I,uNBjclNM/)dglCS}+<_,2awfVL[hBcD(p');
define('NONCE_KEY',        '^^k1cWf|_vU$<!F7hH7.<(beKNrYpIW{o!| GeCm>-g*bIX+:aztRD+u @BbtaS9');
define('AUTH_SALT',        '%g|4C#6<a5=^zo|qmMA^5&($.SRf-oEOiOidTq17n[CRaLC4+3JAz!;He88&*||H');
define('SECURE_AUTH_SALT', '^A)A(D_tS1).ueI@QWyQ](I+WFe!%)IE%&,uKdHAe1 |LLd+,c~r<k|AhwKIc(#(');
define('LOGGED_IN_SALT',   '.C-{|,Uy#QvGIj:T{Cc[7>UbE.y^1+f/xN4`V}.J-T#pj/4iJ]U/eV.0+e;F7,#S');
define('NONCE_SALT',       'K}[7/] !9Lr|EW$nQ-F:~)3`FbGBF$77Jw@s_DBwkgK@~7|KBi:p4qE${Vz1driw');

Unter https://api.wordpress.org/secret-key/1.1/salt/ könnt ihr euch die Schlüssel generieren lassen.

Tipp 8: „wp-config.php“ vor unbefugtem Zugriff schützen

Die Datei wp-config.php solltet ihr zusätzlich per .htaccess-Eintrag schützen, weil in dieser Datei eure Zugangsdaten eurer Datenbank gespeichert sind. Normalerweise kann man eigentlich sowieso nicht auf diese Datei zugreifen, aber sicher ist sicher. Folgendes fügt ihr in eure .htaccess (im root-Verzeichnis eurer WordPress-Installation):

<files wp-config.php>
Order deny,allow
deny from all
</files>

Eine weitere Möglichkeit die wp-config.php zusätzlich zu schützen, wäre es, die Datei eine Verzeichnis-Ebene höher zu verschieben. WordPress sucht automatisch eine Verzeichnisebene höher nach der wp-config.php, wenn die Datei nicht im standardmäßigen Verzeichnis vorhanden ist.

Tipp 9: Zugriff auf „wp-admin“ einschränken

Neben dem normalen WordPress-Login kann auch noch ein .htaccess-Verzeichnisschutz eingerichtet werden. Dazu erstellen wir, falls nicht schon vorhanden, eine .htaccess im Verzeichnis wp-admin und tragen Folgendes ein:

AuthType Basic
AuthName "Login"
# absoluten Pfad zur ".htpasswd" angeben
AuthUserFile /absoluter/pfad/wp-admin/.htpasswd
Require valid-user

Jetzt müssen wir nur noch die passende .htpasswd im Verzeichnis „wp-admin“ erstellen und unsere Zugangsdaten einfügen:

pseudonym:$apr1$az4NDmTE$CHczYtwnyxqh1VDthJNJ5.

Sinnvollerweise sind diese Zugangsdaten nicht die selben wie für das eigentliche WordPress-Login, um die Sicherheit abermals ein wenig zu erhöhen. Den Inhalt für die .htpasswd könnt ihr euch z.B. bei http://www.htaccesstools.com/htpasswd-generator/ generieren lassen.

Des Weiteren können wir den Zugriff noch weiter einschränken, wenn wir nur bestimmte IPs zulassen, die Zugriff auf das Verzeichnis wp-admin haben. Dazu passen wir unsere eben erstellte .htaccess wie folgt an:

Order Deny,Allow
# eure IPs
Allow from 78.111.129.110
Allow from 83.111.129.111
Deny from all
AuthType Basic
AuthName "Login"
# absoluten Pfad zur ".htpasswd" angeben
AuthUserFile /absoluter/pfad/wp-admin/.htpasswd
Require valid-user

Tipp 10: WordPress & Plugins aktuell halten

Wichtig ist es auch, dass ihr eure WordPress-Installation und eure verwendeten Plugins immer aktuell haltet und die neuesten Updates installiert. Ältere Versionen haben eventuell (gravierende) Sicherheitslücken, die in den neueren Versionen (hoffentlich) beseitigt wurden.

Tipp 11: Plugins sparsam einsetzen

Für WordPress gibt es denke ich für fast alles ein Plugin, aber bei jedem zusätzlich installierten Plugin besteht auch die Gefahr, dass eines dieser Plugins eine zusätzliche Sicherheitslücke für euren Blog darstellt bzw. mit sich bringt. Deswegen sollte man überlegen, welche Plugins man wirklich braucht und sie defintiv vorher in einer Testumgebung testen.

Tipp 12: Keine Artikel über eure verwendeten Plugins

Es gibt viele Blogger die gerne Artikel über ihre Top-Plugins schreiben bzw. alle Plugins aufführen, die sie einsetzen. Dagegen ist generell auch nichts einzuwenden (ich finde diese Auflistungen auch immer sehr interessant :)), aber dadurch wissen potenzielle Angreifer auch welche Plugins ihr nutzt und können schauen, ob es für die jeweiligen Plugins Sicherheitslücken gibt und diese dann ausnutzen.

Tipp 13: WordPress-Version im Quelltext verbergen

Aus Sicherheitsgründen solltet ihr auch die Ausgabe der WordPress-Version die ihr verwendet im Quelltext ausblenden. Falls ihr z.B. vergessen habt euer WordPress zu aktualisieren und für die Version die ihr verwendet existiert eine bekannte Sicherheitslücke, dann können potenzielle Angreifer durch Blick in den Quelltext leicht erkennen, welche Version ihr verwendet – siehe folgenden Quelltext-Auszug:

<meta name="generator" content="WordPress 3.3.2" />

Um diese Quelltext-Ausgabe zu unterdrücken, fügen wir in unsere functions.php folgenden Code:

remove_action('wp_head', 'wp_generator');

Es gibt aber noch eine weitere Möglickeit via der readme.html und liesmich.html, die Version eurer verwendeten WordPress-Installation herauszufinden. Wie ihr den Zugriff auf diese Dateien verbietet, erfahrt ihr auf webentwicklerblog.com.

Tipp 14: Backups regelmäßig machen

Damit ihr abgesichert seid, falls euer Blog doch mal gehackt werden sollte, ist es wichtig regelmäßig Backups von eurer WordPress-Installation (Datenbank inbegriffen) zu machen.

Tipp 15: Secruity-Plugins verwenden

Eine gute Auflistung und Erklärung guter Secruity-Plugins für WordPress gibt bei der Webmaster-Zentrale.

Tipp 16: Dateien verschlüsselt hochladen

Anstatt unverschlüsselt Dateien per FTP hochzuladen, solltet ihr lieber SFTP oder SSH nutzen. SFTP gehört bei den meisten Webhostern eigentlich schon mit zum Standard (auch in den Basispaketen).

Fazit

Diese Tipps helfen euch hoffentlich ein wenig die Sicherheit eures WordPress-Blogs zu erhöhen. Da man sich aber nie sicher sein kann, ist eigentlich der Tipp 14 noch mit am wichtigstens – nämlich regelmäßige Backups zu machen.

Weitere Tipps bzgl. WordPress sicherer zu machen, findet ihr beim Smashing Magazine.

Sehr interessant ist auch der Beitrag von Tobias: Die drei Totsünden im Bezug auf WordPress Sicherheit

Kennt ihr noch weitere Tipps die ich hier vergessen habe?

Kommentare  
7 Kommentare vorhanden
1 Chris schrieb am 15. Dezember 2012 um 02:07 Uhr

Sehr gutes Tutorial, das ich bald beherzigen werde. Wie schaut es mit WordPress 3.5 aus hinsichtlich der Kompatibilität? Gibt es da Dinge, die sich geändert haben bzw. bei denen o.g. Tipps evtl nicht greifen? Für eine kurze Info wäre ich dankbar.

2 Stephan L. schrieb am 17. Dezember 2012 um 13:41 Uhr

Hallo Chris,

habe das für WP 3.5 derzeit noch nicht hinsichtlich Kompatibilität überprüft. Soweit ich das auf die Schnelle überblicken kann, sollten die angesprochenen Punkte aber auch bei WP 3.5 reibungslos umsetzbar sein. Wie immer sollte man bei solchen Änderungen vorher natürlich ein Backup gemacht haben. 😉

Gruß Stephan

3 Sven schrieb am 22. März 2013 um 18:43 Uhr

Hallo,

bin der totale Laienkünstler, kann mir jemand dann, dasa oben genannte Näher und verständlicher erklären oder mir vielleicht sogar…!

Fragt mich oder schreibt Bitte per Mail – brauche die Hilfe! Erkläre dann gerne, was ich vorhabe…!

Danke und schönes WE

4 Stephan L. schrieb am 25. März 2013 um 13:24 Uhr

Hallo Sven,

was genau verstehst du denn nicht? Vielleicht kann ich es dir noch ein wenig verständlicher erklären.

Ansonsten, wenn du konkret jemanden suchst der dir deine WordPress-Installation absichert, würde ich mal die Jobbörse im WordPress-Forum forum.wpde.org versuchen. Oder wende dich an Tobias von http://www.blog-mal.de, der bietet auch Secruity-Checks für WordPress an.

Grüße

Stephan

5 KL-Webmedia schrieb am 18. Juni 2013 um 09:41 Uhr

Super Blogpost! Ich habe auch schon einige Sachen gelesen zur WordPress Sicherheit. Diese hast du hier auch aufgeführt, aber das sind auch einige dabei die ich bisher nicht kannte. Danke!

6 Stephan L. schrieb am 18. Juni 2013 um 11:24 Uhr

Hey,

danke für dein positives Feedback – freut mich immer, wenn ich anderen mit meinen Artikeln helfen konnte. 😉

Beste Grüße

Stephan

7 Martin schrieb am 12. Mai 2014 um 00:25 Uhr

Ich bin leider kein WordPress-Profi, aber ich würde es zunächst damit versuchen:

Die Datei wp-login.php umbenennen, den Anmeldelink entfernen

Das ist zwar keine Sicherheitsmaßnahme im eigentlichen Sinne von etwas absichern (bzw. eine recht schwache, Security by obscurity), hilft aber bei Webanwendungen unheimlich viel, da Hacker bekannte Schwachstellen suchen.

http://www.smart-webentwicklung.de/wp-login.php sollte eigentlich nicht erreichbar sein.

Ich weiß nicht, wie mühsam es ist, das umzubasteln (vermutlich nicht allzu sehr), aber machbar ist es ohne Frage. Geeignet ist es vor allem für alle Alleinblogger oder solche, die in sehr kleinen Teams arbeiten, wo der Öffentlichkeit keine Anmeldung möglich sein muss.

Eventull dasselbe mit wp-admin machen, wie gesagt, ich kenne mich leider kaum mit WordPress aus, sehr wahrscheinlich ist es aber nicht nötig, da man dort eh nur eingeloggt Zugriff haben sollte, von daher ist es egal, ob die Pfade Angreifern bekannt sind. Sollten CSRF bei WordPress möglich sein, schützen umgekehrt auch keine geänderten Pfade.

Sicherlich wird es viele Normalanwender, die wenig bis keine Programmierkenntnisse haben, überfordern, die Pade zu ändern, so dass WordPress anschließend noch läuft (dass WordPress offensichtlich feste Verzeichnisstrukturen voraussetzt, ist schlimm genug und ein starker Hund!). Dennoch ist es vielleicht eine Anregung.

Das mit der wp-config.php kann man sich sparen, darin sind nichts als Definitionen, da geht keine Gefahr von aus. Sollte ein Hacker wirklich Zugriff auf den Inhalt bekommen, hat man größere Probleme als die Sicherheit seiner WordPress-Installation …

Und noch was Wichtiges: seine Projekte im Auge behalten. Unregelmäßigkeiten fallen so normalerweise schnell(er) auf (als wenn man Monate sich gar drum kümmert), und ein eventueller Einbruch kann im Schadensumfang begrenzt werden. Google Webmaster Tools und Bing Webmaster Tools helfen auch, schnell zu erkennen, ob etwa Malware über die eigene Site verbreitet wird.

Wie und womit (welchem Programm) nutzt Du SSH und SFTP?

1 Trackback/Pingback vorhanden
Du bist herzlich eingeladen auch ein Kommentar zu hinterlassen!
Kommentar schreiben

Vielen Dank für dein Kommentar!