9 .htaccess-Einträge für eine bessere WordPress-Sicherheit + Bonus Tipp
Die Sicherheit von WordPress-Seiten wird von vielen Webseiten-Betreibern vernachlässigt. Bei der Standard-WordPress-Installation gibt es eine ganze Reihe von möglichen Schwachstellen. Die meisten WordPress-Installationstutorials erklären einen schnellen, einfachen Weg, WordPress in 5 Minuten zu installieren. Aber sie befassen sich nicht mit der Sicherheit.
Zum Beispiel zählt das Durchsuchen von Verzeichnissen und Dateien als ernsthafte Sicherheitslücke.
In dem Artikel zeige ich Dir 10 Codeschnipsel für die .htaccess-Datei, die helfen die Sicherheit Deiner WordPress-Seite zu verbessern. Bevor wir loslegen, lass Dir kurz erklären was die .htaccess-Datei ist.
Was ist die .htaccess-Datei?
Die .htaccess-Datei bietet auf Apache-Server eine optionale Konfigurationsmöglichkeit. Diese kann in jedem Ordner auf einem Webserver abgelegt werden. Damit hast Du verschiedenste Möglichkeiten: IPs blockieren, ein Verzeichnis mit einem Passwort schützen, eine Datei oder einen Ordner für den öffentlichen Zugriff sperren, etc.
Bevor du Dateien, wie die .htaccess veränderst, mache immer eine Datensicherung bzw. Kopie von der Datei.
.htaccess-Dateien sind verstecke Dateien und in manchen FTP-Programmen nicht sichtbar. Schaue deshalb in die Einstellung Deines FTP-Programm nach. Meist heißt die Einstellung “versteckte Dateien anzeigen erzwingen”.
Nicht jeder Webhoster, gerade bei günstigen Paketen erlaubt die Erstellung und Bearbeitung einer .htaccess-Datei. Schaue da entweder nach einem Upgrade deines Webhosting-Paketes oder denke über einen Wechsel zu einem Webhoster für WordPress nach.
WordPress-Sicherheit mit 9 einfache Codeschnipsel erhöhen
- Directory Browsing verhindern
- Zugriff auf den Ordner wp-includes unterbinden
- Zugriff auf wp-config.php und .htaccess unterbinden
- Image-Hotlinking unterbinden
- Umleitung zu einer Wartungsseite
- Eigene Fehlerseiten
- Zugriff auf wp-admin für nur bestimmte IP-Adressen gestatten
- Bestimmte Dateitypen erlauben im Ordner wp-content
- Böse Bots blockieren
- Bonus: Zugriff auf wp-admin durch Server schützen
Directory Browsing verhindern
Dies ist eine der am meisten unterminierten Sicherheitslücke in einer WordPress-Seite. Standardmäßig ermöglicht der Apache-Webserver das Durchsuchen von Verzeichnissen. Das bedeutet, dass alle Dateien und Ordner innerhalb des Root-Verzeichnisses (manchmal auch Home-Verzeichnis genannt) des Webservers einsehbar und für einen Besucher zugänglich sind.
Eine schnelle Suche via Google fördert 39.000.000 Ergebnisse zu Tage.
Das willst Du nicht zu den 39 Millionen gehören, denn Du willst nicht, dass jemand durch deine Medien-Uploads oder deine Theme- oder Plugin-Dateien browst.
Codeschnipsel zum Deaktivieren des Directory Browsing:
# Blockiere directory browsingOptions -Indexes
Zugriff auf den Ordner wp-includes unterbinden
Der Ordner wp-includes enthält nur die Dateien, die unbedingt notwendig sind, um die Kernversion von WordPress zu betreiben. Denke daran, dass sich das Standard-Theme immer noch im wp-content/theme-Verzeichnis befindet. Daher sollte kein Besucher (einschließlich dir) Zugriff auf den Inhalt des wp-include Ordners benötigen. Du kannst den Zugriff mit folgendem Codeschnipsel deaktivieren:
# Blockiere den Zugriff auf den Ordner wp-includes und darin liegenden Dateien<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRule ^wp-admin/includes/ - [F,L]RewriteRule !^wp-includes/ - [S=3]RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]RewriteRule ^wp-includes/theme-compat/ - [F,L]</IfModule>
Zugriff auf wp-config.php und .htaccess unterbinden
Die wp-config.php-Datei enthält die sensibelsten Zugangsdaten deiner WordPress-Seite. Sie enthält unter anderem den Datenbanknamen und die Zugangsdaten sowie verschiedene andere kritische Daten. Du willst unter keinen Umständen, dass andere Leute in diese Datei schauen. Und natürlich willst Du den öffentlichen Zugriff auf die Quelle all dieser Sicherheit deaktivieren - die .htaccess Datei selbst.
Du kannst den Zugriff auf die wp-config.php mit folgendem Code deaktivieren:
# Verbietet den Zugriff auf die wp-config.php-Datei<files wp-config.php>order allow,denydeny from all</files>
Um den Zugriff auf alle .htaccess-Dateien zu verweigern (denke daran, dass einige im wp-admin und anderen Ordnern liegen können), benutze dieses Code Snippet:
# Verbietet den Zugriff auf alle .htaccess-Dateien<files ~ "^.*\.([Hh][Tt][Aa])">order allow,denydeny from allsatisfy all</files>
Image-Hotlinking unterbinden
Bilder deiner WordPress-Webseite können auf fremden Webseiten eingebunden werden. Das nennt man Image-Hotlinking. Das verbraucht deinen Traffic bei deinem Webhoster und bei manchen ist dieser limiert, auch kann es auch die Performance belasten. Das schlimmste daran, Du merkst nichts und bekommst auch keine Anerkennung dafür. Dafür gibt es einen coolen Hack, mit dem Du das unterbinden kannst und eine lange Nase zeigst. Dieses Codeschnipsel eliminiert dieses Problem und sendet dieses Bild, wenn ein Hotlink erkannt wird.
# Verhindert Hotlinking. Die URL in der letzten Zeile kannst du mit jeder anderen Datei ersetzen.RewriteEngine onRewriteCond %{HTTP_REFERER} !^$RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?deinedomain.de [NC]RewriteRule \.(jpg|jpeg|png|gif)$ http://i.imgur.com/MlQAH71.jpg [NC,R,L]
Umleitung zu einer Wartungsseite
Wenn Du den Webhoster wechselst oder Wartungsarbeiten durchführst, ist es immer empfehlenswert, eine statische “Wartungsarbeiten”-Seite zu erstellen, um deine Besucher darüber zu informieren, dass die Website ein Upgrade oder eine Wartung durchläuft. So verhinderst Du auch das etwaige Sicherheitslücken bei den Wartungsarbeiten von Angreifern ausgenutzt werden können.
Erstelle einfach eine HTML-Datei und lade sie in das Basis-WordPress Installationsverzeichnis hoch. Füge das folgende Snippet in Deine .htaccess Datei ein. Sobald der Vorgang beendet ist, stelle sicher, dass Du diese Zeilen löschst oder auskommentierst, um zum Normalbetrieb zurückzukehren. Du kannst auskommentieren, indem Du ein ‘#’ an den Anfang jeder Zeile anhängst. In der Zeile 4 kannst Deine IP-Adresse eintragen, damit weiterhin vollen Zugriff hast.
# Umleitung von Besuchern auf deine-wartungsseite.htmlRewriteEngine onRewriteCond %{REQUEST_URI} !/deine-wartungsseite.html$RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123RewriteRule $ /deine-wartungsseite.html [R=302,L]
Eigene Fehlerseiten
Du kannst mit der .htacces-Datei nutzerfreundliche Fehlerseiten einrichten. Ok, kein Sicherheitstipp, jedoch sehr gut für Dein Nutzer. Verwende die Fehlertypen 403, 404 and 500. Für die Typen 404 und 403 kannst in WordPress Seiten dafür erstellen. Für den Fehlertyp solltest eine unabhänige HTML-Datei erstellen. Dann einfach folgenden Code in deine .haccess-Datei einfügen:
# Eigene Fehlerseiten für Fehler 403, 404 and 500ErrorDocument 404 /fehler-404.htmlErrorDocument 403 /fehler-403.htmlErrorDocument 500 /fehler-500.htmlEine tolle Erklärung zu den Fehlertypen bekommst Du hier: https://de.wikipedia.org/wiki/HTTP-Statuscode
Zugriff auf wp-admin für nur bestimmte IP-Adressen gestatten
Der Ordner wp-admin enthält die Dateien, die zum Ausführen des WordPress-Dashboards erforderlich sind. In den meisten Fällen benötigen Deine Besucher keinen Zugriff auf das WordPress-Dashboard. Eine gute Sicherheitsmaßnahme ist es, nur einigen ausgewählten IP-Adressen den Zugriff auf den wp-admin-Ordner zu ermöglichen. Du kannst die IPs der Personen zulassen, die Zugriff auf das WordPress-Dashboard benötigen - Redakteure, Contributors und andere Admins. Dieses Codeschnipsel erlaubt nur festen IPs den Zugriff auf den wp-admin-Ordner und verweigert dem Rest der Welt den Zugriff.
# Den Login und Zugriff auf wp-admin mittels IP-Adressen limitieren<Limit GET POST PUT>order deny,allowdeny from allallow from 302.143.54.102allow from IP_ADDRESS_2</Limit>
Stelle sicher, dass Du eine neue .htaccess-Datei erstellst und diese in den wp-admin-Ordner einfügst und nicht in das Basis-Installationsverzeichnis. Wenn es letzteres ist, wird niemand außer Dir in der Lage sein, Deine Seite zu besuchen - nicht einmal Suchmaschinen! Das willst Du sicher nicht.
Leider gibt es ein paar Fallstricke:
- Wenn Dein Seite die Neuanmeldung von Benutzern erlaubt oder fördert, wäre es fast unmöglich, die Anzahl der Benutzer zu verfolgen.
- Personen mit dynamischen IP-Adressen (meist ADSL-Breitbandbenutzer, die PPP oder PPPoE-Protokolle verwenden) haben ihre IPs jedes Mal geändert, wenn sie sich aus- und wieder einloggen bei ihrem ISP. Natürlich wäre es unpraktisch, all diese IPs zu verfolgen und in die htaccess-Datei einzutragen.
- Mobiles Breitband: Wenn Du mobiles Internet verwendest, hängt Deine IP-Adresse vom aktuellen Mobilfunkmast ab, mit dem Du verbunden sind. Angenommen, Du bist auf Reisen - Deine IP ändert sich ständig mit jedem Kilometer. Auch hier ist es fast unmöglich, den Überblick über die htaccess-Datei zu behalten.
- Öffentliche Wi-Fi-Hotspots: Die Verwendung von Anmeldeinformationen, wenn Du über einen öffentlichen Wi-Fi-Hotspot mit dem Internet verbunden sind, ist ein großes Tabu, da ein Kind mit einer winzigen Software jedes von Ihnen eingegebene Zeichen extrahieren kann. Ganz zu schweigen davon, dass jeder Wi-Fi-Hotspot eine eindeutige IP-Adresse hat.
Glücklicherweise können alle diese Nachteile (außer dem ersten) durch die Verwendung eines VPNs behoben werden. Wenn Du dein VPN so einstellst, dass es sich nur mit einer einzigen IP-Adresse verbindet, dann kannst Du es einfach zu Deiner htaccess-Datei hinzufügen, und alle Deine Probleme sind gelöst.
Bestimmte Dateitypen erlauben im Ordner wp-content
Wie Du sicherhlich weißt, enthält der wp-content-Ordner die Themes, Plugins und alle Medien-Uploads. Du möchtest sicher nicht, dass andere Personen uneingeschränkt darauf zugreifen können. Zusätzlich zum Deaktivieren des Durchsuchens von Verzeichnissen kannst Du auch den Zugriff auf alle Dateitypen verweigern, mit Ausnahme einiger weniger. Im Wesentlichen kannst Du selektiv Dateien wie JPG, PDF, DOCX, CSS, JS usw. freischalten und den Rest verweigern. Füge dazu diesen Codeschnipsel in Deine .htaccess-Datei ein:
# Verhindere den Dateizugriff bis auf die folgenden Ausnahmen Order deny,allowDeny from all<Files ~ ".(xml|css|js|jpe?g|png|gif|pdf|docx|rtf|odf|zip|rar)$">Allow from all</Files>
Du mußt eine neue .htaccess-Datei mit dem Code erstellen und diese in den Ordner wp-content einfügen. Lege diese nicht in das Basis-Installationsverzeichnis - sonst funktioniert sie nicht. Sie können auch einen beliebigen Dateityp in die Liste aufnehmen, indem Du ein “|” nach “rar” einfügst. Die obige Liste enthält die notwendigen Dateien - XML, CSS und JavaScript, gängige Bild- und Dokumentenformate und schließlich die am häufigsten verwendeten Archivformate.
Böse Bots blockieren
Schlechte Bots haben verschiedene Gründe, die einen suchen Sicherheitslücken. Die anderen suchen automatisiert E-Mailadressen und manch anderer klaut direkt den ganzen Content.
Diese bösen Bots lassen sich direkt über Serverebene aussperren. Dazu benötigt man nur die IP-Adressen und schon war es das.
Der Code:
# Ersetze IP_ADDRESS2_* mit der IP-Adresse die blockiert werden sollen <Limit GET POST>order allow,denydeny from IP_ADDRESSE_1deny from IP_ADDRESSE_2allow from all</Limit>
Eine aktuelle Liste mit bekannten Bad Bots bekommt man unter anderem hier: https://ip-bannliste.de/aktuelle-bannliste.html
Bonus: Zugriff auf wp-admin durch Server schützen
Es 2 Dinge, die eine WordPress-Seite schwach machen. Zum einen der freie Zugriff auf die Loginseite wp-login.php und damit den Zugang zum WordPress-Backend wp-admin. Das ermöglicht Angreifern automatisierte Attacken auf diese Seite zu machen. Leider ist eine ungeschützte wp-login-Seite keine Seltenheit.
Dann gibt es die wenigen Seitenbetreiber, die WordPress-Sicherheitsplugins installieren, um u.a. diese Schwachstelle zu schützen. Das Problem hierbei ist, das die Last von WordPress getragen werden muss und es extrem auf die Performance geht. Auch ist dieser Schutz nicht 100%ig gewährleistet, wenn ein automatisiert Angriff erfolgt.
Dabei geht es ganz einfach mit Mitteln des Apache-Servers. Die Login-Seite und den Backend-Bereich lassen sich mit einem serverseitigen Passwort absichern.
Wichtig: Das ist nur bei Webseiten, die keinen Kunden-Login, Mitgliedsbereich oder dergleichen haben. Auch kann es je nach verwendeten Plugins oder Theme zu Problemen kommen. Hier muss man genau testen.
Als erstes muss eine “.htpasswd”-Datei erstellt werden. In dieser stehen die Benutzernamen und die verschlüsselten Passwörter. Den Inhalt kannst auf dieser Seite ganz schnell erstellen: https://htpasswdgenerator.de/
Zum Beispiel sieht dann der Benutzername “benutzer” und das Passwort “geheimespasswort” so aus:
benutzer:$1$g|zfInXe$vAfpCoXdRf5nHYocBLj2H.
Die Datei .htpasswd speicherst Du dann in einem beliebigen Verzeichnis ab.
Die .htaccess-Datei ergänzt du dann folgenden Code. Du musst noch den Pfad zu der .htpasswd anpassen.
<Files wp-login.php>AuthType BasicAuthName "Passwortgeschützter Bereich"AuthUserFile /pfad/zur/datei/.htpasswdRequire valid-user</Files>
Ein großes Danke an Daniel Ruf( daniel-ruf.de ), Webentwickler und Experte für Softwaresicherheit. Er hatte noch ein paar Ergänzung zu dem Artikel.
Autor: Tim EhlingSeit 2000 beschäftige ich mich mit Webentwicklung und seit 2006 mit WordPress. Neben Webentwicklung und Wartung mache ich auch Schulungen in WordPress.
Ich optimiere Webseiten und Social Media Kanäle, so das Kunden und auch die Suchmaschinen zufrieden sind.
- Webentwicklung
- Update-Service für WordPress
- WordPress-Schulungen
- Social-Media Checkups
- Suchmaschinenoptimierung(SEO)