10 Tipps zur Verbesserung der Sicherheit von WordPress Websites
In diesem Tutorial möchten wir einige wichtige und interessante Tipps geben, wie man eine WordPress-Website sicher aufbaut und potentiellen Hackern möglichst viele Steine in den Weg legt. 10 Tipps zur Sicherheits-Maximierung, die auch bei unseren Kunden-Websites Anwendung finden.
1. Starke Kennwörter nutzen
Direkt zu Beginn der Installation wird man aufgefordert, die Datenbank-Zugangsdaten einzugeben. Auch hier gilt, dass es keine zu starken Passwörter gibt. Das gilt im Übrigen auch für jegliche Benutzerkonten, die anschließend erstellt werden. Erlaubt man später eine Registrierung seitens der Benutzer sind Plugins ratsam, die nur starke Kennwörter (z.B. DF5kysdZS66) erlauben.
2. Tabellenprefix ändern
WordPress erlaubt in den aktuelleren Versionen den Tabellenprefix der MySQL Datenbank-Tabellen anzupassen. Davon ist dringend Gebrauch zu machen. Der Standardprefix „wp_“ ist natürlich Hackern bekannt. Durch eine Anpassung des Prefixs z.B. in „wp45fkze_“ macht man es potentiellen Eindringlingen schwerer. Zudem muss dieser Prefix nur einmal angegeben werden. Merken braucht man sich den Prefix eh nicht.
3. Upload-Ordner auslagern
WordPress erlaubt es den Upload-Ordner der integrierten Mediathek auszulagern. So kann man einen beliebigen Ort wählen und im WordPress-Backend unter „Einstellungen > Mediathek > Uploads in folgendem Ordner speichern“ den Pfad anpassen. Da es sich beim Upload-Ordner um einen relativ ungeschützten Ordner handelt (chmod 777 – von Jedermann Lesbar und Beschreibbar) ist dieser besonders in Watte zu packen.
4. WordPress-Instanz in einen Unterordner verschieben
Die so genannten Core-Dateien des Systems können natürlich in den Hauptordner gelegt werden, doch macht man es auch hier potentiellen Angreifern sehr einfach, da man die Standard-Struktur beibehält. WordPress erlaubt das Auslagern in einen Unterordner z.B. „wp_cms4538“. Dorthin verschiebt man die WordPress Dateien integral, lässt jedoch die „index.php“ im Hauptordner. Diese Datei ist entsprechend anzupassen:
/** Loads the WordPress Environment and Template */
require(‚wp_cms4538/wp-blog-header.php‘);
Nicht vergessen im Backend der WordPress-Installation unter Einstellungen > Allgemein die Pfade zur Website bzw. zum Blog anzupassen.
5. Keinen User „Admin“ nutzen
Erstellt man einen ersten Benutzer, sollte man diesen kryptischer benennen als „admin“ oder „Administrator“. Diese Bezeichnungen werden sehr oft genutzt für diese Art von Benutzerkonten und sind entsprechend schnell zu erraten. Wer noch eine Stufe weiter gehen möchte, sollte auch die User-ID in der Datenbank entsprechend anpassen, da dem Erst-Administrator entsprechend „1“ als User-ID zugewiesen wird, was einem Hacker unabhängig von der Wahl der Bezeichnung ebenfalls in die Karten spielt.
6. Kunden-Login nicht als Administrator anlegen
Sollte es noch andere Benutzer geben, die generiert / erstellt werden müssen, sollte man nur in extremen Ausnahmefällen den Status des Administrators zuweisen. Hier gilt: Zuviele Köche verderben den Brei und zu allem Überfluss leidet die Sicherheit ebenfalls.
Ratsamer ist es, Kunden den Status des „Editors“ zuzuweisen. Die Rechte sind für den alltäglichen Gebrauch mehr als ausreichend und die Risiken stark eingeschränkt. Gilt es die Rechteverwaltung innerhalb von WordPress entsprechend zu verfeinern, lassen sich Plugins wie „Members“ nutzen, um eigene Rollen mit angepassten Benutzerrechten zu erstellen.
7. HTACCESS nutzen zur Erhöhung der Sicherheit
Eine Htaccess-Datei ist ein sehr mächtiges Instrument. Via „.htaccess“ lassen sich zahlreiche Sicherheitseinstellungen vornehmen, die den Zugriff auf zahlreiche wichtige Konfigurationsdateien und Backend-Bereiche beschränken.
Wir empfehlen das Plugin WP HTAControl. Mittels dieses Plugins, lassen sich zahlreiche Sicherheitseinstellungen mit wenigen Klicks aktivieren:
- Absicherung der „wp-config.php“ Datei vor Zugriff von Außerhalb
- Absicherung der „comments.php“ Datei vor Zugriff von Außerhalb
- Begrenzung des Upload-Limits (z.B. auf 500kb)
- Deaktivierung der „Indexes“ WHERE id = sprich der automatischen Auflistung eines Ordnerinhaltes beim direkten Aufruf
- Deaktivierung der Server-Signaturen bei Fehlermeldungen (um Angreifern keine wichtigen Serverinformationen zu geben)
- Eigene Einträge in die htaccess-Datei
- Zahlreiche Einstellungen, die einen direkten Einfluss auf die „ausgespuckte“ URL haben.
- … und vieles mehr
7. WordPress Backend „WP-Admin“ via IP sperren
Nutzt man beispielsweise innerhalb eines Unternehmens eine so genannte „fixe/feste IP-Adresse“ lässt sich der Zugriff auf genau diese Adresse beschränken. Greift man außerhalb dieser IP-Adresse auf das Backend von WordPress zurück, erhält man eine Fehlermeldung („Forbidden“). So lässt sich der Administrationsbereich extrem effektiv schützen, allerdings setzt dies voraus, dass man immer über die gleiche IP auf die Website zugreift. Private ADSL-Anbieter (Zugriff von zu Hause) setzen allerdings auf „dynamische IP-Adressen“ die sich schnell ändern können. Gewährt man in diesem Fall nur einer gewissen IP Zugriff, sind spätestens nach 24 Stunden die Schotten dicht.
Diese Restriktion über die IP Adresse ist beispielsweise bei Unternehmen interessant, die ihre Website auf den eigenen hausinternen Servern hosten und entsprechend nur von dort aus zur alltäglichen Pflege Zugriff haben müssen.
um diese IP Sperre zu errichten, reicht es eine „.htaccess“-Datei in den wp-admin/ Ordner zu legen mit folgendem Inhalt (wobei die entsprechende IP-Adresse selbstverständlich anzupassen ist):
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName „WordPress Admin Access Control“
AuthType Basic
<LIMIT GET>
order deny,allow
deny from all
# whitelist IP address
allow from 89.123.57.12
</LIMIT>
8. Sperre nach X fehlgeschlagenen Logins und Unterdrückung von Fehlermeldungen
Im Normalbetrieb geht die Login-Maske des WordPress-Adminbereichs sehr großzügig mit den ausgespuckten Informationen um. Zudem kann man „unendliche“ Versuche unternehmen, das Kennwort bzw. den Benutzernamen zu knacken. In diesem Fall spricht man im Fachjargon auch von „Brute-Force-Attacken“.
In diesem Fall empfehlen wir einmal ein Plugin („Limit Login Attempts“ – Sperre nach einer angegeben Anzahl von fehlgeschlagenen Logins) sowie eine Anpassung in der „functions.php“ des genutzten Themes. Einfach folgende Code-Zeile in die „functions.php“ einfügen:
add_filter(‚login_errors‘,create_function(‚$a‘, „return null;“));
Anschließend werden alle Fehlermeldungen unterdrückt. Ohne diese Anweisung würde WordPress Angreifern umgehend verraten, ob der „geratene“ Benutzername tatsächlich existiert und ob lediglich das Kennwort falsch ist.
9. WP-Security Scan by WebsiteDefender Plugin installieren
In Verbindung mit einem kostenlosen Account bei www.websitedefender.com entwickelt sich das Plugin „WP-Security-Scan“ zu einem unverzichtbaren Wachhund für jede WordPress-Website. Das Tool weist nicht nur auf relevante Sicherheitseinstellungen hin, welche getätigt werden sollten, sondern scannt aktiv das System nach potentiellen Eindringlingen. Vorausgesetzt man hat einen kostenlosen Zugang auf www.websitedefender.com erstellt und diesen mit dem Plugin verknüpft.
10. WordPress Aktualisierungen einspielen
WordPress ist eine sehr populäre Plattform und erfreut sich immer wachsender Beliebtheit. Die Folge sind regelmäßige Attacken auf bekannte Sicherheitslücken. Glücklicherweise ist die Community rund um WordPress bemüht, entsprechende Lücken schnellstmöglich zu schließen. Daher sollten WordPress-Updates möglichst schnell eingespielt werden. Vorausgesetzt man besitzt erstens ein vollständiges Backup und stellt zweitens sicher, dass alle installierten Plugins mit der neuen WordPress-Version korrekt zusammen arbeiten bzw. kompatibel sind. Alternativ empfiehlt sich eine Spiegelung der gesamten WordPress-Seite. So kann man das Update bedenkenlos einspielen und testen, ohne die Live-Umgebung zu gefährden.
Respekt!
Klasse Artikel mit vielen nützlichen Tipps zur Sicherheit.
Viele Grüße Mika
Hallo Mika, vielen Dank für dein Feedback. Toll, dass Dir der Artikel gefällt. Du kannst ihn gerne via Twitter oder Facebook weiterempfehlen :-) Beste Grüße
Gino, weiter so. Top Beitrag. Werde ich direkt nutzen!
Hallo Michael, vielen Dank für die positive Kritik! Super, dass die Zusammenstellung der Tipps hilfreich ist:-)
Danke für die Tipps, werde es gleich mal auf meinem WP. Blog umsetzen…
Hi Gino, danke für den hervorragenden Artikel. Ich werde meine Blogs und die meiner Kunden gleich entsprechend mit einer paar deiner Tipps absichern, da sich die Hacking-Versuche auf die WP-Installationen doch extrem häufen und letztens leider den Blog eines meiner Kunden komplett platt gemacht haben (er hatte das letzte Update vor zwei Jahren gemacht ;-(
Ich habe deinen Artikel auch gleich bei meinem Artikel zu dem Thema in meinem Blog verlinkt: http://blog.hiltmann.net/blogging-1384-wie-sicher-ist-ihr-blog-12-wordpress-plugins-fur-mehr-sicherheit/comment-page-1#comment-12997
Herzliche Grüße
Uwe
Hallo Uwe. Vielen Dank! Der letzte Punkt ist der banalste und wichtigste. Nur wer „up to date“ bleibt, schließt die wichtigsten Lücken. Alle Vorsichtsmaßnahmen sind sinnlos, wenn sich Hacker auf allseits bekannte Sicherheitslücken alter WP-Bugs stürzen. Alle anderen Tipps und Ratschläge sind wichtig zur Prävention. Ein regelmäßiges Update des Cores ein Muss!
Hey dankeschön für diese tolle Auflistung. Ich glaube die Sicherheit wird tatsächlich von vielen zu sehr vernachlässigt.
Hallo Flo, danke für dein positives Feedback. Das Thema wird in der Tat oft unterschätzt. Die Krokodilstränen fließen meist im Nachhinein ;)
[…] 10 Tipps zur Verbesserung der Sicherheit von WordPress Websites […]
Sehr gute und wichtige Tipps, und dazu richtig gut erklärt. Hoffentlich werden die auch von zahlreichen Usern entsprechend umgesetzt… habe diese Seite auf Facebook verlinkt, vielleicht hilft es :-)
Hallo Klaus. Vielen Dank für dein Lob und vor allem vielen Dank für das Posten auf deine Facebook Seite. Viele Grüße!
Vielen Dank für die nützlichen Tipps. Durch Hackversuche auf meinen Blog bin ich darauf aufmerksam geworden das des öfteren versucht wird script auf den server zu laden auch über Sicherheitslücken in Plugins oder Themes. Ich habe noch keine Rückmeldung jedoch habe ich versucht mich jetzt vor solchen Angriffen zu schützen indem ich eine .htaccess in den upload-Ordner geschrieben habe mit folgendem Inhalt:
AddType text/html .php .php5 .php4 .php3 .phtml
Jetzt können auch scripte selbst wenn sie über eine Sicherheitslücke in den uploadordner gekommen sind nicht mehr ausgeführt werden. Ich habe Testweise eine PHP-Datei in das uploadverzeichnis geladen und es getestet. Es wird lediglich noch der Quellcode selber ausgegeben jedoch nicht mehr das script laufen lassen.
Für ein Feedback ob dies sinnvoll ist oder nicht wäre ich sehr dankbar. Beeinträchtigen scheint das WP derzeit offensichtlich nicht.
LG
Oski
Hallo Oski,
ich denke, für mehr Sicherheit ist das nicht verkehrt. Das WP Security sichert schon so sehr gut ab, aber es ist ja nicht verkehrt, noch seinen Uploads Ordner zu schützen. Effektiv ist es hier wichtig, dass umfangreiche Tests gefahren werden, um zu sehen, ob es Probleme im WordPress Gebrauch gibt.
Schaue dir doch mal folgendes Tutorial an… es geht hier sogar noch viel weiter.
http://tomolivercv.wordpress.com/2011/07/24/protect-your-uploads-folder-with-htaccess/
Viele Grüße,
Adrian
(NB: wir übernehmen keine Haftung bei evtl. Schäden durch das befolgen dieser Anleitung, da wir die 100%ige Richtigkeit der Inhalte Dritter nicht prüfen können. Alle Anpassungen geschehen auf eigene Gefahr)
Hallo, danke vor allem für den Tipp mit dem Plugin. Eines, das möglichst viele Lücken schließt, wäre wirklich gefragt.
Eine Frage zur functions.php: Ist es egal, wo und wie man dort die Befehle einträgt? Bei einem Theme-Update ist das dann aber weg?
Grüße,
Martin
Hallo Martin. Danke für dein Feedback. Die functions.php wird von WordPress von oben bis unten „abgegrast“ und „durchgeparst“. In diesem Sinne ist es egal wo was platziert wird (in dem Fall zumindest). Deine Anpassungen in der functions.php sind nur weg, wenn du direkt im Eltern-Theme – auch Parent-Theme genannt – arbeitest. Besser ist es ein so genanntes Childtheme anzulegen. So kannst du das übergeordnete „Parent-Theme“ immer updaten ohne, dass deine im Childtheme sicher aufgehobenen Änderungen verloren gehen. Insofern du gerne Video-Tutorials magst, empfehle ich dir ein tolles Einsteiger-Tutorial zum Thema Childthemes von Elmastudio: http://www.elmastudio.de/wordpress/video-tutorial-ein-wordpress-child-theme-erstellen/
[…] Wie Sie Ihre WordPress-Website zudem effektiv und einfach schützen, erfahren Sie in unserem Blogbeitrag “10 Tipps zur Verbesserung der WordPress Security”. […]
Danke, guter Artikel! Sehr viele nützliche Tipps. Natürlich lässt eine Brut-Force Attacke nicht grundsätzlich an der Sicherheit des WordPress System zweifeln. Gruß Christian
Stimmt, aber wer sich weniger gut auskennt (Kunden, Auftraggebern…) wird annehmen WordPress sei doch unsicher, „das habe man in den Nachrichten gelesen“. Schade, dass manche Agenturen und Redakteure oftmals der Schlagzeile wegen Dinge etwas missverständlich im Raume stehen lassen. Dass CM-Systeme, Cloud-Dienste und andere prominente „2.0 Dienste“ gehackt werden ist eben eine interessantere Schlagzeile, als „WordPress aufgrund menschlichen Versagens ausgenutzt“ ;)
Hallo,
vielen Dank für diese Liste an „Todos“. Mit der IP-Adresse geht halt nur, wenn man immer vom selben IP zugreifen will, was leider nicht immer machtbar ist :(
Grüße aus München
Ulrich Eckardt
„chmod 777 – von Jedermann Lesbar und Beschreibbar“
Das stimmt so nicht, da betrifft Benutzer des Systems.
Hier wird das gut erklärt, siehe auch Komentare:
https://kittblog.com/news/5/das-web/120/die-un-sicherheit-mit-chmod-777/
Genau meine Sichtweise. Manchmal ist es aber doch richtig eine zweite Meinung einzuholen. ;)
[…] Wie Sie Ihre WordPress-Website zudem effektiv und einfach schützen, erfahren Sie in unserem Blogbeitrag „10 Tipps zur Verbesserung der WordPress Security“. […]
Vielen Dank für die hilfreichen Tipps! Gerade der Tipp mit der htaccess bringt sehr viel. Ich habe allerdings kein Plugin genommen, sondern direkt in die htaccess den Zugriff auf viele Dateien gesperrt und eine Paswortabfrage vor dem Aufruf von /wp-admin eingefügt. Eine Frage dazu: Wenn man diesen Tipp sauber umsetzt, dann ist doch ein Plugin, das die Anzahl der Login-Versuche limitiert, überflüssig. Bis bis zum Login dürfte dann kein Angreifer in der Regel kommen. Hier kann man sich also ein Plugin sparen. Oder sehe ich das falsch?
Hallo Sebastian. Ja, korrekt. Ich würde es mal so formulieren: Wer kaum schützt, sollte zumindest die Anzahl an fehlgeschlagenen Logins reduzieren und Angreifer auf die Art ausschließen. Idealerweise wird aber natürlich bereits im Vorfeld via .htaccess geschützt. Dadurch wird zwar noch der Webserver beansprucht, aber nicht die auf PHP-basierende Login-Maske von WordPress. Jeder einzelne Angriff auf diese Login-Maske stößt den PHP-Prozess an und generiert Datenbank-Abfragen. All das bleibt einem erspart, wenn man den Schutz früher ansetzt (sprich via .htaccess). In diesem Sinne ist es sogar deutlich ressourcenschonender früher zu agieren. Viele Grüße!
Ich würde komplexe Seiten vor allem nicht mit WordPress umsetzen, da individuelle Lösungen eben sehr komplex werden. Zum Beispiel ist es nicht möglich bestimmte CSS-Klassen in den Seiten festzulegen, ohne Angst haben zu müssen, dass sie beim nächsten Speichern automatisch rausgelöscht werden. Gerade bei größeren Projekten oder Multisites ist das äußerst tragisch.
Auch ist es um die WordPress Sicherheit nicht gut gestellt. Man braucht Sicherheitserweitungen wie WordPress Security oder Janotta und Partner WordPress JS_Security.
Die sind zwar alle kostenlos, aber trotzdem sollte die Sicherheit nicht vergessen werden. Ich denke WordPress macht seinen weg, da es kostenlos und Open Source ist, aber trotzdem heisst Kostenlos nicht einfach und sicher.
Hier meine Tipps für kostenlose Sicherheit für WordPress:
Nummer 1: https://www.janotta-partner.de/wordpress-security.html
Nummer 2: https://de.wordpress.org/plugins/all-in-one-wp-security-and-firewall/
Nummer 3: https://wordpress.org/plugins/wordfence/
Nummer 4: https://wordpress.org/plugins/sucuri-scanner/
Danke!
Gibt wenige Blogartikel zum Thema mit deinem Umfang und Detailgrad. Werde die Liste nun durcharbeiten und hoffe, den Blog um eines sicherer machen zu können.
Viele Grüße
Hallo,
das ist alles sehr Interessant zu diesem Punkt habe ich eine Frage:
WordPress Backend „WP-Admin“ via IP sperren
Was ist wenn man keine FESTE IP hat, was kann man denn machen, bei Telekom, Versatel, QSC, Kabeldeutschland, O2 oder oder.
Danke für einen Tipp.
Happy Sonntag allen.
Hallo Dirk, der einzige Weg das umzusetzen wäre eine Verbindung über ein VPN. Manche VPN-Dienste bieten eigene fixe IP Adressen an. Diese kannst du dann nutzen. Allerdings ist das nicht sonderlich praktikabel und mit Mehrkosten verbunden. Da ist es möglicherweise günstiger bei deinem Internetprovider nachzufragen wieviel Aufpreis eine fixe IP kostet. Dann stellt sich allerdings auch die Frage nach dem Mehrwert. Klar ist es Punkto Sicherheit gut den Zugang auf eine IP zu beschränken, wenn das aber der einzige Grund ist Mehrkosten in Kauf zu nehmen, würde ich persönlich das nicht machen. Das muss natürlich jeder für sich selber entscheiden.
Hallo Gino, wow vielen Dank für Deine schnelle Antwort. Das ist echt etwas doof, wenig Anbieter machen im Privat Segment fest IP-Adressen. Aber es gibt ja noch andere Wege das ganze besser Absichern :-), Gut Anleitungen hast Du ja.
Sicherlich kann der WordPress Betreiber auch selbst aktiv werden und nach Sicherheitslücken suchen. Scanner gibt es viele kostenlose, als Beispiel der
https://www.janotta-partner.de/blog.website-scanner.html
Nutze ich fast täglich bei meiner Arbeit mit Magento und WordPress!
Hallo Gino,
die 10 Tipps sind echt super! Je früher man sich das zu Herzen nimmt, desto weniger Stress hat man später. Freue mich auf mehr solcher informativen Texte.
LG,
Andreas
Vielen Dank, das hört man doch gern :)