WordPress hat sich zum weltweit beliebtesten Content Management System entwickelt, doch wie steht es um die Sicherheit? Entsprechend schlecht. Was weit verbreitet ist, wird gerne angegriffen.

Seit Jahren beschäftige ich mich daher mit der Sicherheit meiner diversen WordPress-Installationen. Auf zahlreichen Ebenen lässt sich die Robustheit von WordPress gegen Hacker-Angriffe verbessern. Je nach Anspruch sind dazu mehr oder weniger technische Expertise oder auch Investitionen erforderlich. Alles ist möglich: von einer WordPress-Installation, die einfach ein wenig sicherer ist als der Durchschnitt, bis hin zu einer digitalen Festung, in die einzudringen wirklich kaum noch möglich ist.

Gefahr durch veraltete Skripte und Websites

Eins vorweg: Sollten Sie mehrere Websites oder Anwendungen auf ein und demselben Webserver hosten, so ist das Gesamtkonstrukt leider immer nur so sicher wie das schwächste Glied in der Kette. Konkret: Es bringt nicht maximale Sicherheit, die businesskritischen Websites wie verrückt abzuschotten, wenn nebenan auf einem anderen Pfad des gleichen Servers die völlig veraltete Version einer anderen Website oder Anwendung liegt.

Wordpress Sicherheit KartenhausDenn dann können Hacker die in Vergessenheit geratene Anwendung kapern. Von ihr aus kann sich der Schadcode dann auch auf vermeintlich gut abgesicherte Anwendungen ausbreiten, die auf dem gleichen Server liegen. Hier ist also Vorsicht geboten – durchforsten Sie Ihren Webserver oder Webspace doch einmal auf veraltete, in Vergessenheit geratene Websites oder Skripte, die nicht mehr benötigt werden. Liegt da irgendwo noch ein öffentlich zugänglicher mySQLDumper? Okay, die Frage war leicht übertrieben. Oder? Auch Gefälligkeitsleistungen für Friends & Family gehören auf die Checkliste – etwa die von Ihnen ehrenamtlich gepflegte Website für den Kegel- oder Literaturclub. Sie hat strikt betrachtet nichts auf dem Webserver zu suchen, auf dem auch Ihre geschäftliche Website liegt. Besser auslagern – oder aber mit genau der gleichen Ernsthaftigkeit absichern wie die eigentlich relevanten Websites.

Eintrittswahrscheinlichkeit und Folgenschwere

Doch warum ist Website Security eigentlich so wichtig? Legen Sie zwei Maßstäbe in Kombination an, wenn es um die Bewertung von Risiken geht. Zum einen: die Eintrittswahrscheinlichkeit. Zum anderen: die Folgenschwere. Beim Thema Website Security sind beide Aspekte kritisch. Gegen WordPress laufen täglich millionenfach automatische Angriffe. Ist die Website gehackt, stehen schnell Reputations- und Vermögensschäden ins Haus:

  •  Sie könnten aus den Google-Suchergebnissen verbannt werden. Google kennt kein Pardon, verweist betroffene Websites nach ganz weit hinten in den Search Results und warnt eindringlich, wenn es Malware auf Webservern erkennt. Umsatzverluste können die Folge sein.

Warnung-Google-Website-gehackt

– Vertrauliche Daten, auch personenbezogene, könnten öffentlich werden. Das gilt vor allem für Shopbetreiber und Dienstleister mit Online-Bezahlung, aber auch für alle Website-Betreiber, die beispielsweise Kontaktformulare mit Zwischenspeicher in der Webserver-Datenbank betreiben.

  • Schadenersatz- und Unterlassungsansprüche könnten auf Sie zukommen. Infizierte Websites liefern mitunter Malware an die Browser von Besuchern aus. Zudem spezialisieren sich manche Hacker auf das parasitäre Hosten von Inhalten. Ich kenne Fälle, in denen nicht lizensierte Stockfotos auf feindlich übernommene Webserver geladen wurden. Auch viele weitere Szenarien des kriminell motivierten Missbrauchs der gehackten Website sind denkbar. Die rechtlichen und finanziellen Folgen können erheblich und ohne Weiteres, hier übertreibe ich nicht, existenziell sein, vor allem für noch junge Unternehmen.

Was also tun, um die eigene WordPress Website gegen Angriffe von außen abzusichern?

Sicherheit fängt schon bei der Installation von WordPress an

  1. Entscheiden Sie sich für SSL. Diskussionen darüber sind müßig – SSL-Zertifikate gibt es inzwischen günstig bis hin zu kostenlos. Als Betreiber haben Sie auf jeden Fall den Vorteil eines gewissen Basis-Schutzes, wenn Sie sich am Backend anmelden. Sie möchten sicherlich nicht, dass Ihr Login jedes einzelne Mal, wenn Sie sich anmelden, völlig unverschlüsselt übertragen wird. Zudem ist SSL schick vertrauensbildend und ein latenter, wenn auch umstrittener Rankingfaktor bei Google. (Aber in Sachen SEO haben ja sowieso stets zwei Experten zehn Meinungen.)
  2. Definieren Sie in der wp-config.php einmalige, zufällige “Authentification Unique Keys”. Anschließend können Sie die Keys vergessen. Diese zufälligen Zeichenketten sind dennoch wichtig. Sie dienen der Verschlüsselung Ihrer Logindaten. Wenn Sie nicht selbst in die Tasten hauen und zufällige Zeichen tippen möchten: WordPress bietet einen Online-Generator für Unique Keys.
  3. Verwenden Sie eine SQL-Datenbank mit eigenem Datenbanknutzer und sicherem Kennwort – nicht den globalen Datenbankbenutzer für alle Datenbanken auf Ihrem Server, auch wenn das vielleicht bequemer wäre.
  4. Deaktivieren Sie die Möglichkeit, auf Ihre Datenbanken von extern aus zuzugreifen.
  5. Bei der Installation legen Sie ein Datenbank-Präfix für Ihre SQL-Tabellen fest. Belassen Sie dieses Präfix nicht beim vorgeschlagenen Standard – denken Sie sich ein eigenes aus, gern möglichst kreativ.
  6. Geizen Sie mit Schreibrechten. Es sollten keine 777-Schreibrechte vergeben werden. Wenn Sie auf ein wenig Komfort wie automatische Updates ohne FTP-Zugriff verzichten können (letzterer sollte natürlich stets nur verschlüsselt erfolgen), dann können Sie dem Server Schreibrechte großflächig entziehen. Rein theoretisch muss fast kein Verzeichnis wirklich vom Webserver User beschreibbar sein, aber das ist, zugegeben, eine sehr theoretisch-puristische Haltung. Dennoch: Ich finde beispielsweise, dass Theme-Dateien nicht unbedingt vom Backend aus editierbar sein müssen, dazu kann man schon mal zu einem FTP Client greifen.
  7. Der Klassiker: Keiner Ihrer Nutzer sollte “Admin” heißen.
  8. Für alle Nutzer sichere Passwörter verwenden – und Gastautoren, wenn überhaupt, nur einen Login mit den absolut notwendigen Rechten geben.
  9. Verzichten Sie auf überflüssige Plugins. Inaktive Plugins, die Sie nur äußerst selten brauchen – wie beispielsweise Übersetzungstools für Themes und andere Plugins – deinstallieren Sie besser komplett und bei Bedarf temporär neu. Jedes Plugin stellt ein mögliches Sicherheitsleck dar, und wenn Sie Dutzende davon auf dem Server haben, dann sind Ihnen mehrere Sicherheitslücken pro Jahr de facto garantiert.
  10. Setzen Sie gleich zu Beginn Ihrer Arbeit mit WordPress ein persönliches Webmonitoring (Google Alerts oder RSS Search Queries) mit Suchbegriffen wie “Wordpress” und “Sicherheitslücke” (bevorzugt englisch) auf, damit Sie nicht zu den Letzten gehören, die von Sicherheitslücken erfahren. Sie könnten, um up to date zu bleiben, zudem unser Business Blog auch bei Facebook liken – wir werden über wichtige Vorkommnisse immer wieder berichten.
  11. Schauen Sie im Quelltext Ihrer fertigen Website nach: Was verrät Ihre Installation über sich selbst? Versionsnummern des WordPress Core und der Plugins etc. sollten möglichst verschwinden, denn sie erleichtern Angriffe.
  12. Schützen Sie Ihr Backend vor unbefugtem Zugriff, entweder durch einen Passwort-Schutz auf Verzeichnisebene (.htaccess bei Apache – das aber nur in Kombination mit SSL) oder durch eine Beschränkung des Backend-Zugriffs nur von bestimmten IP-Adressen aus. Auch diese Restriktion lässt sich via .htaccess einrichten.

Mehr Sicherheit durch die richtige Serverkonfiguration

Schluessel-Sicherheit-Wordpress-ServerkonfigurationDie Konfigurationsdateien Ihres Webservers (bzw. Webhosting-Produkts) nennt sich in der Regel .htaccess – wenn der weit verbreitete Apache-Webserver Ihre Seiten ausliefert. Ist es ein nginx- oder sonstiger Server, so spricht dieser eine etwas andere Sprache. Ich beschränke mich in diesem Beitrag auf Apache und .htaccess, es gibt jedoch zahlreiche Konverter und Anleitungen, mit denen sich die Tipps auch auf anderen Servern umsetzen lassen.

Ich liebe meine .htaccess-Datei und scherze manchmal: “Vielleicht sollte ich sie als Buch veröffentlichen.” Spaß beiseite: Hier lassen sich wirklich eine ganze Reihe sinnvoller Festlegungen für mehr Sicherheit treffen.

  1. Schutz für die wp-login.php

    Sie möchten Ihr Backend vor unbefugtem Zugriff schützen wie oben empfohlen? Dann ist es empfehlenswert, mindestens die Datei wp-login.php abzusichern.

    Ich mache das immer so:

    – Unterhalb des WordPress-Stammverzeichnisses lege ich einen Pfad “prot” an (der auch anders heißen kann). In dieses Verzeichnis kommt eine Datei mit dem Namen .htpasswd, die ich einfach mit einem Texteditor erstelle und dann hochlade. Achtung: Dateien, die mit einem Punkt beginnen (den Sie nicht vergessen dürfen), sind per Definition Systemdateien, die von FTP Clients nicht immer angezeigt werden. Beim bekannten FTP Client FileZilla muss beispielsweise unter “Server” die Option “Auflistung versteckter Dateien erzwingen” aktiviert sein, dann sehen Sie alles.

    – In die Datei .htpasswd muss der gewünschte zusätzliche Login, den alle Nutzer (unabhängig vom WordPress Login) zum Erreichen des Backends benötigen. Allerdings verschlüsselt, nicht im Klartext. Die Verschlüsselung lässt sich leicht im Web generieren, etwa mit diesem .htpasswd Generator.

    – Erledigt? Die Datei hat den richtigen Namen, ist plain text und liegt am richtigen Ort? Dann geben wir dem Webserver jetzt in der .htaccess des Worpress-Stammverzeichnisses den Befehl, Zugriff auf wp-login.php nur noch bei korrekter Angabe des Logins zu gewähren. Dazu öffnen wir die in der Regel bereits vorhandene .htaccess und fügen Folgendes hinzu:

    Hierbei steht “/pfadangabe/zu/wordpress/” für den Ort Ihrer WordPress-Installation auf dem Webserver. Wie die lautet, sehen Sie – bei einem Managed Server – in der Regel im Admin-Panel Ihres Webhosters.

    Hat alles geklappt? Dann sind Sie schon deutlich sicherer vor Hacker-Angriffen, die mithilfe sogenannter Brute-Force-Angriffe Ihren Login in das Backend von WordPress zu überwinden versuchen. Denn die kommen gar nicht mehr bis zum WordPress-Anmeldedialog durch. Und Sie haben den Effekt erreicht, ohne den kompletten Pfad /wp-admin abzuschirmen – gut, denn das kann im Detail zu Komplikationen führen.

  2. Schützen Sie Ihr WordPress vor Besuchern, die Sie nicht wollen

    Mal ehrlich: Ist es wirklich so wichtig, dass Ihre Website auch von Grönland aus abrufbar ist? Vermutlich nicht. Nun ist es kein Geheimnis, dass die meisten automatischen Angriffe gegen Websites aus bestimmten Regionen der Erde kommen. Klar, Hacker können auch VPN-Verbindungen nutzen und vortäuschen, Sie kämen aus dem Dorf nebenan, obwohl sie irgendwo weit ab in der Steppe hausen. Doch die Mühe machen sich viele Hacker nicht, da sie auf Masse arbeiten, wie mit großen Schleppnetzen, ganz ähnlich wie Spammer, die Ihre E-Mail-Adresse ja auch nicht von Hand heraussuchen.

    Es ist eine Philosophiefrage: Theoretisch können Sie via .htaccess weite Teile der Erdbevölkerung vom Besuch Ihrer Website abhalten und sich über viel mehr Sicherheit freuen. Aber das ist eine zweischneidige Sache, denn Sie möchten ja keine wichtigen Besucher aussperren – wie beispielsweise den Google Bot oder das Nobelpreiskomitee.

    Sogenanntes Geoblocking ist also eine heikle Sache und nicht bzw. nur in akuten Gefahrensituationen – temporär – empfehlenswert. Wie es auch eleganter geht, beschreibe ich weiter unten (wenn Sie so weit lesen) im Abschnitt “Web Application Firewalls und Content Delivery Networks”.

    Was aber auf jeden Fall empfehlenswert ist:

    – Sperren Sie Besucher aus, die fehlende oder bekannt unseriöse “User Agents”, also Browser-Kennungen, aufweisen. Das ist etwa vergleichbar mit einem Durchfahrt-Verboten-Schild. Es lässt sich zwar aushebeln, hält aber schon einiges an Ungemach ab. Wenn Ihnen der Bot, der nur Ihren Content klauen oder Schwachstellen finden möchte, schon sagt: „Hallo, ich bin ein böser Bot“ – dann können Sie auch guten Gewissens sagen: „Geschlossene Gesellschaft heute.“

    – Blockieren Sie verdächtige “Query Strings”. Das sind Aufrufe total merkwürdiger URLs, die keinen Sinn haben, sondern nur zum Auffinden von Schwachstellen auf Ihrem Server dienen, etwa: /tiny_mce/plugins/tinybrowser/upload.php?type=file – So etwas zu blockieren gleicht in etwa einem etwas sichereren Schloss an der Haustür, das sich nicht mit dem erstbesten Dietrich öffnen lässt.

    Beide Aufgaben lassen sich mit Einträgen in der .htaccess hervorragend und vor allem zuverlässiger als mit jedem Plugin bewerkstelligen. Ich empfehle zum Einlesen die Dokumentation zur sogenannten “6G Firewall”, die in Wirklichkeit einfach ein seit Jahren immer weiter entwickelter Schnipsel Code für die .htaccess ist, sowie das “Ultimate .htaccess File”, das User “Ludo237” bei GitHub zur Verfügung gestellt hat. Zudem finden sich im Web viele weitere Tipps und Tricks zum Tunen der .htaccess, mit denen Sie spielen können. Allerdings immer vorher das Original sichern, denn der kleinste Fehler in dieser Datei führt dazu, dass Ihre Website falsch oder überhaupt nicht mehr angezeigt wird. Dann sind Sie sehr froh, wenn Sie noch ein Backup der Originaldatei haben.

Backups und Updates

Jede Website braucht eine Backup-Strategie. Falsch ist, diese Strategie so zu definieren: “Immer, wenn ich daran denke, mache ich mal ein Backup.” Sie führt nämlich unweigerlich dazu, dass Sie gerade dann kein aktuelles Backup haben, wenn Sie eins brauchen. Huch!

Schauen Sie, wie Ihnen Ihr Webhoster dabei helfen kann. Manche bieten tägliche automatische Backups an. Nutzen Sie ein – solides und von vielen Nutzern positiv bewertetes, aus dem offiziellen WordPress-Verzeichnis kommendes – Plugin für automatische Backups. Oder schreiben Sie, wenn Sie ein Nerd sind, einen Cronjob. Hauptsache: regelmäßig, am besten jede Nacht, ein Backup. Ideal, wenn das Ergebnis des Backups nicht ausgerechnet auf dem Server abgelegt wird, der auch geschützt werden soll, sondern anderswo. Aber natürlich wäre es auch keine gute Idee, zu diesem Zweck einen Login für businessrelevante Cloud-Speicher dem Backup-Plugin anzuvertrauen. Sonst hätte ja ein erfolgreicher Hacker nicht nur Zugriff auf Ihren Webserver, sondern gleich auf alle Ihre Daten in der Cloud. Nur das nicht!

Zusätzlich sollten Sie vor jedem Update von WordPress oder WordPress-Plugins und -Themes manuell ein Backup auslösen, denn Updates sind meist die Ereignisse, die dazu führen, dass plötzlich irgendwas nicht mehr funktioniert. Man benötigt sie nicht nur zum Schutz vor Hacker-Angriffen, sondern auch, um die Fehler der WordPress- und Plugin-Programmierer schnell auszubügeln.

Auf Updates zu verzichten ist allerdings auch keine gute Idee. Rasch schleichen sich sonst Sicherheitslücken ein. Updates sind immer möglichst rasch nach Verfügbarkeit einzuspielen. Am besten täglich. Allerdings nicht zwischen Tür und Angel – oder wenn Sie schnell zum nächsten Meeting oder Bus müssen. Denn es kann immer etwas schief gehen. Dann ist die Darstellung plötzlich zerschossen – oder es geht im schlimmsten Fall gar nichts mehr. Ich habe schon die wildesten Sachen erlebt – wie Blog-Seiten, die plötzlich im Endlos-Modus liefen (immer wieder die gleichen Beiträge in der Übersicht, hintereinander gehängt, so lange, bis der Server in die Knie geht).

Oder WordPress bleibt im Wartungsmodus hängen. Falls das passiert: per FTP im Stammverzeichnis die Datei .maintenance löschen.

Daher immer einen Zeitpuffer einplanen, wenn Sie Updates einspielen.

Ich halte das so:

– Ein zentrales Skript legt für mich Nacht für Nacht ein komplettes Backup aller WordPress Websites an, die ich, verteilt auf mehrere Webserver und Webhoster, betreibe.

– Zusätzlich führe ich regelmäßig manuelle Backups durch, jeweils für den gesamten Webserver (Dateien und Datenbanken). Bei der Gelegenheit kann ich (eher selten) Bilder komprimieren und neu hochladen – für mehr Performance.

– Wie ich Backups wieder einspielen kann, wenn etwas schief geht: Ich hab’s geübt. Denn nichts ist ärgerlicher als ein Backup, das man zwar hat, aber nicht flugs wieder einspielen kann, weil man irgendetwas nicht bedacht hat (zum Beispiel, dass die Datenbank zu groß für den gewählten Weg des Wieder-Einspielens ist).

Potentiell trügerische Sicherheit durch Plugins

“Limit Login Attempts” und wie sie alle heißen: Ich habe sie auch immer wieder genutzt, stehe jedoch auf der Seite der Skeptiker. Diese Plugins sollen für mehr Sicherheit sorgen, indem zum Beispiel die Zahl der fehlerhaften Anmeldeversuche innerhalb eines definierbaren Zeitraums begrenzt wird.

Solche Plugins sind schön und gut, ich würde ihnen aber nie blind vertrauen. Strikt betrachtet müsste man den Code analysieren, und das nach jedem Update erneut. Ich glaube, dafür hat fast keiner von uns Zeit und/oder Detailwissen.

Web Application Firewall und Content Delivery Network

Ich bin fest davon überzeugt, dass es ein wirklich hohes Maß an Sicherheit nur mit einer zusätzlichen Schutzinstanz zwischen Webserver und großem, weiten, bösen Internet gibt. Eine gute Web Application Firewall kann das leisten, und auch Content Delivery Networks bieten teilweise entsprechende Funktionen.

Um diese Angebote nutzen zu können (wenn Sie nicht in der komfortablen Situation sind, die Firewall auf einem eigenen Server zu installieren) benötigen Sie in der Regel Zugriff auf die DNS-Einstellungen. Entweder müssen Sie die A Records im DNS ändern oder sogar komplett anderen Nameservern (jenen des CDN) die Zuständigkeit für Ihre Domain übertragen. Das klingt schlimmer als es ist, doch nicht jeder Webhoster erlaubt solche Konfigurationen in jedem Produkt. Manchmal klappt es nur auf Umwegen, etwa über eine Vertragsänderung oder das Hinzubuchen einer Option.

Wenn Sie dann aber einmal soweit sind und Web Application Firewall und/oder CDN in Ihre WordPress-Architektur integriert haben – ich wette mit Ihnen, Sie werden nicht mehr darauf verzichten wollen. Einerseits wird die Auslieferung idealerweise schneller. Sie erhalten zusätzliche Minify- und Caching-Funktionen, idealerweise ein globales CDN mit schnellem Anycast Network. Sie sehen, von wo welche Angriffe kommen (und sie kommen!), können die Konfiguration flexibel anpassen und sich hoffentlich sehr viel mehr auf Gestaltung und Ausbau Ihrer Website und Ihres Business konzentrieren als auf die Abwehr von Angriffen. Nebenbei werden Sie vermutlich Gefallen daran finden, die Geschwindigkeit Ihrer Website bei der Gelegenheit auch noch gleich zu optimieren – auch das ist ja ein Rankingfaktor für die Google-Suche.

Abgestuftes Geoblocking für POST Requests

Wordpress-access-from-a-blocked-country
Hier möchte ich auch nochmals kurz auf den Aspekt “Geoblocking” von oben zurückkommen: Während es sehr fragwürdig und mitunter auch nachteilig ist, die Website für bestimmte Regionen der Welt komplett zu blockieren und damit nicht abrufbar zu machen, erlaubt eine gute Web Application Firewall auch abgestufte Einstellungen pro Region. Das heißt: Nutzer aus bestimmten Teilen der Welt können uneingeschränkt mit Ihrer Website interagieren und beispielsweise Kontaktformulare absenden oder Kommentare unter Blogpostings schreiben. Nutzer in anderen Teilen der Welt dürfen Ihre Website zwar ansehen, aber keinerlei sogenannte POST-Requests durchführen. Anschauen ja, anfassen nein. Das ist doch ein guter Kompromiss.

Wie halten Sie es mit der WordPress-Sicherheit?

Trotz aller Ausführlichkeit habe ich das Thema WordPress-Sicherheit nur am Rande gestreift. Dennoch hoffe ich, die eine oder andere Anregung geliefert zu haben.

Freuen würde ich mich, wenn die eine oder der andere weitere Tipps und Gedanken zum Thema hat – oder weiterführende Links (sofern es sich nicht um Werbung handelt).

 

Bernhard JodeleitAutor dieses Beitrags:

Bernhard Jodeleit berät Unternehmen in Sachen Digitalstrategie, Content Marketing und Krisenkommunikation. Mit WordPress beschäftigt er sich seit 2006.