Andreas Hecht 31. Oktober 2014

Du kummst hier net rein: die 8 nützlichsten .htaccess-Tricks für WordPress

Nützliche .htaccess Tricks für WordPress
Andreas Hecht

entwickelt WordPress-Websites und bietet dir einen Website Sicherheit Service und einen Performance...

Die .htaccess Datei ist ein mächtiges Konfigurationswerkzeug für einen Webserver oder ein Webhosting-Paket und sollte überall dort im Einsatz sein, wo man WordPress selbst hosten kann. Die Datei sollte sich im Hauptverzeichnis einer WordPress-Installation finden lassen, also dort, wo die Ordner wp-content, wp-admin usw. liegen. In diesem Beitrag zeigen wir Ihnen, welche Grundeinstellungen in diese Datei gehören, damit WordPress sicherer und besser wird.

Nützliche .htaccess Tricks

Die Vorbereitung

Zuerst einmal muss die Datei gefunden werden. Der folgende Screenshot zeigt, wo die Datei liegt.

Der Speicherort der .htaccess-Datei

Ganz wichtig ist es, vor dem Bearbeiten der .htaccess Datei ein Backup selbiger zu erstellen. Dazu kopieren Sie die Datei einfach in einen neuen/anderen Ordner. Eine Besonderheit unter Mac OS X: Der Mac sieht alle Dateien mit einem Punkt vor dem Dateinamen als Systemdateien an, also auch die .htaccess. Das bedeutet, dass er sie ausblendet, sobald Sie sie auf den Schreibtisch gezogen haben. Abhilfe schafft hier das kleine Dashboard Widget Hidden Files, mit dem man nach Belieben die versteckten Dateien ein- und wieder ausblenden kann. Das Widget funktioniert auch unter Yosemite.

Nach jeder Änderung an der .htaccess-Datei sollte ein Refresh des Browsers durchgeführt werden, um feststellen zu können, ob die Webseite noch erreichbar ist. Denn bei nur einem fehlerhaften Zeichen wird die betreffende Webseite nicht mehr angezeigt werden, die .htaccess ist sehr empfindlich. Sollte Ihre Webseite also nicht mehr darstellbar sein, laden Sie bitte die Backup-Version wieder hoch. Das behebt den Fehler dann zumeist augenblicklich.

Die nun folgenden Code-Schnipsel fügen Sie bitte einfach an das Ende der .htaccess an.

1. Zugriff von außen auf .htaccess Datei verbieten

Damit die wichtige Serversteuerungs-Datei .htaccess keinesfalls von außerhalb des (S)FTP Zugangs erreichbar und damit verändert werden kann, verbieten wir als erstes den Zugriff darauf.

# Zugriff auf .htaccess und .htpasswd verbieten, falls in Benutzung
<FilesMatch "(\.htaccess)">
  Order deny,allow
  Deny from all
</FilesMatch>

2. Bild-Hotlinking verbieten

Das sogenannte Hotlinking von Bildern kann für Sie zum echten Problem werden. Hierbei laden andere Menschen die Bilder aus Ihrer Webseite nicht herunter, um sie dann anschliessend zu verlinken, sondern es wird nur der Pfad zu Ihrem Bild angegeben. Dies könnte Ihre Webseite verlangsamen und wichtige Bandbreite stehlen. Externe Verlinkung Ihrer Bilder können Sie mit dem folgenden Code jedoch ganz leicht verhindern.

Der Platzhalter deinewebseite.com muss durch die URL Ihrer Webseite ersetzt werden. Ganz unten ist der Pfad zu einer Grafik zu finden, die anstatt des verlinkten Bildes angezeigt wird. Diese Grafik kann durch jede andere ersetzt werden.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?deinewebseite.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?deinewebseite.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://i.imgur.com/g7ptdBB.png [NC,R,L]

Bitte beachten: Sollten Sie einen externen Feedanbieter wie zum Beispiel Feedburner benutzen, könnte es sein, dass keine Bilder im Feed landen.

3. Browser-Caching aktivieren

Kaum eine andere Tuning-Maßnahme bringt mit so wenig Aufwand so viel Ergebnis. Viele der größten Dateien Ihrer Webseite ändern sich im Grunde genommen nie, deshalb ist es eine gute Idee, diese für eine lange Zeit in den Browser-Cache zu befördern. Dateien, wie zum Beispiel das CSS oder das JavaScript einer Webseite, werden dann nur beim ersten Besuch einmal vom Browser geladen. Bei jedem weiteren Besuch (oder aber auch beim Aufruf weiterer Seiten beim ersten Besuch) muss der Browser diese Dateien nicht mehr laden. Dementsprechend wird die Webseite viel schneller aufgerufen.

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

4. IP-Adressen dauerhaft bannen

Es kann schon mal vorkommen, dass man spezielle IP-Adressen einfach bannen möchte. Sei es, weil derjenige versucht hat, den Administrationsbereich zu hacken, oder aber, weil er vielleicht nur böswillige (Spam) Kommentare hinterlässt. Wenn Sie die IP-Adresse desjenigen wissen, nutzen Sie folgenden Code um ihn für immer, zumindest unter dieser IP-Adresse, auszusperren.

<Limit GET POST>
order allow,deny
deny from 123.456.78.9
deny from 987.654.32.1
allow from all
</Limit>

Bitte beachten: Die IP-Adressen im obigen Code müssen natürlich noch angepasst werden.

5. Include Only Dateien blocken

Etliche, wirklich wichtige Dateien sollten niemals zugänglich sein, außer von WordPress selbst. Auch davor kann man sich mit folgendem Code schützen. Bitte beachten: Haben Sie eine WordPress-Multisite-Installation, dann funktioniert der Code nicht.

# Block the include-only files.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
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>

 6. Den wp-content Ordner schützen

Der WordPress Ordner wp-content ist der wichtigste Ordner, da er Ihre Themes, die Plugins und Bilder, gecachte Dateien usw. enthält. Für Hacker ist dieser Ordner das Hauptangriffsziel, deshalb sollte er gut geschützt sein.

Erstellen Sie eine separate .htaccess Datei, fügen den folgenden Code hinein und laden die Datei in den wp-content Ordner hoch (www.deinewebseite/wp-content/).

Order deny,allow
 Deny from all
 <Files ~ ".(xml|css|jpe?g|png|gif|js)$">
 Allow from all
 </Files>

7. Die XML-RPC Schnittstelle abschalten

Die XML-RPC Schnittstelle in WordPress dient dazu, WordPress mit externen Programmen verwalten zu können; zum Beispiel, um Artikel zu veröffentlichen oder Kommentare zu bearbeiten. Zu den Programmen gehören unter anderem die mobilen Anwendungen für iOS, Android und Co, aber auch der Windows LiveWriter. Diese Schnittstelle kann aber auch für DDoS-Angriffe genutzt werden, die dafür sorgen, dass Ihre Webseite lahm gelegt wird. Mit einem kurzen Eintrag in die .htaccess kann die Schnittstelle komplett abgeschaltet werden:

<Files xmlrpc.php>
  Order Deny,Allow
  Deny from all
</Files>

Diesen Eintrag sollten Sie allerdings nur verwenden, wenn Ihre Webseite keine Blog-Funktionalität hat, da auch keine Trackbacks mehr durch gelassen werden. Sollten Sie einen Blog betreiben oder Ihr WordPress mit mobilen Anwendungen betreiben wollen, nutzen Sie den folgenden Code, um die Schnittstelle abzusichern:

<IfModule mod_setenvif.c>
  <Files xmlrpc.php>
    BrowserMatch "Poster" allowed
    BrowserMatch "WordPress" allowed
    BrowserMatch "Windows Live Writer" allowed
    BrowserMatch "wp-iphone" allowed
    BrowserMatch "wp-android" allowed
    Order Deny,Allow
    Deny from All
    Allow from env=allowed
  </Files>
</IfModule>

Im Beispiel-Code sind Zeile für Zeile folgende Clients freigegeben:

  • Poster
  • WordPress-Blogs
  • Windows Live Writer
  • WordPress for iOS
  • WordPress for Android

Nicht benötigte Freigaben gehören zeilenweise entfernt. Neue User Agents können hinzugefügt und somit freigeschaltet werden.

Quelle: Sergej Müller – XML-RPC-Schnittstelle in WordPress via .htaccess absichern

8. PHP – Fehlermeldungen unterdrücken

Dies ist ein ganz wichtiger Punkt, denn sobald PHP eine Fehlermeldung heraus gibt, wird damit auch der Dateipfad sichtbar. Sergej Müller schreibt zu diesem Problem:

In WordPress-Blogs ist es recht simpel, einen PHP-Fehler (indirekt) zu erzeugen, um an die Fehler-Ausgabe inklusive Pfad heran zu kommen. Dafür muss man weder Administrator noch Experte sein. Durch einen direkten Aufruf bestimmter WordPress-Core- wie Plugins-Dateien in der Adresszeile des Browsers werden PHP-Fatal-Fehler generiert (weil notwendige und referenzierte WordPress-Funktionen fehlen).Erlauben Server- bzw. PHP-Einstellungen die Darstellung von Fehlern, erscheinen Fehler der Anwendung im Browser. Kaum jemand kann etwas mit der Fehlerausgabe anfangen, für Angreifer ist es jedoch eine sehr wertvolle Information, um nach Hintertüren zu suchen und diese auszunutzen.

Mit einem simplen Eintrag in der .htaccess Datei können Sie das Problem lösen:

php_flag display_errors Off

Zugabe – denn Sicherheit geht über alles

Blocken wir nun den Zugriff von außen auf wichtige Dateien, denn schließlich sollten nur Sie Zugriff auf diese Dateien haben. Der untere Punkt schützt Ihre Webseite zusätzlich gegen URL Exploits, also gegen Hackversuche über die URL. Dieser Code befindet sich in jeder .htaccess Datei meiner Webseiten.

# ----------------------------------------------------------------------
# Wichtige Sicherheitseinstellungen
# ----------------------------------------------------------------------	

#wichtige Dateien gegen Zugriff von außen Blocken
<files install.php>
Order allow,deny
Deny from all
</files>

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

# PROTECT readme.html
<files readme.html>
 Order Allow,Deny
 Deny from all
 Satisfy all
</Files>

# PROTECT liesmich.html für DE Edition
<Files liesmich.html>
 Order Allow,Deny
 Deny from all
 Satisfy all
</Files>

<files error_log>
Order allow,deny
Deny from all
</files>

# Keine  URL based exploits zulassen
RedirectMatch 403 \[
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Double slashes in allen URLs verbieten
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(([^/\ ]+/)*)/+([^\ ]*)
RewriteRule ^ /%1%3 [L,R=301]
</IfModule>

Fazit

Mit nur ein paar Minuten Zeitaufwand machen Sie mit dem Code dieses Artikels Ihre WordPress-Webseite wesentlich sicherer und auch schneller. Hacker haben jetzt bedeutend weniger Chancen, Ihre Webseite zu kompromittieren und Ihre Leser werden es Ihnen danken, dass die Webseite durch das Aktivieren von Browser-Caching schneller geworden ist.

Links zum Beitrag

(dpe)

Andreas Hecht

Andreas Hecht

entwickelt WordPress-Websites und bietet dir einen Website Sicherheit Service und einen Performance Service für deine Website. Außerdem ist er Spezialist für Onpage SEO und bringt Deine Website in die Top-Suchergebnisse von Google.
Dr. Webs exklusiver Newsletter
Hinweise zum Datenschutz, also dem Einsatz von Double-Opt-In, der Protokollierung der Anmeldung, der Erfolgsmessung, dem Einsatz von MailChimp als Versanddienstleister und deinen Widerrufsrechten findest du in unseren Datenschutzhinweisen.

16 Kommentare

  1. Danke für die Tips. Allerdings verursacht Tip Nr. 6 (Den wp-content Ordner schützen) bei mir einen 403-Fehler.

    Liegt dass daran, dass die Adresse nicht http://www..de, sonder www2..de lautet?

  2. Hi, vielen Dank für den super verständlichen Beitrag. Habe alles ausprobiert, vieles übernommen. Allerdings folgende Teile der .htaccess haben zu Fehlermeldungen des Servers (500) geführt: files install und wp-config zugriff verbieten, Fehlermeldung unterdrücken, wp-content Ordner schützen. Woran kann das liegen? Danke für Hinweise…

  3. Hallo zusammen,
    ja, sehr coole Übersicht die auch nicht-Experten weiterhilft, eine Seite zu sichern. Hmmm, ich hab da noch eine Frage, die in die gleiche Richtung geht.
    Man kann ja über htaccess den Zugriff auch auf einzelne Hosts bzw. IP-Adressen beschränken. So kann man z.B. Zugriff für Intranet gewähren, für Internet jedoch verbieten. Kann man auch auf diese Weise den Zugriff auf einzelne Seiten (Menüeinträge) innerhalb einer WP-Installation steuern? Das wäre perfekt!!! So habe ich z.B. eine Seite mit den Menüs „Home“, „Karten“ und „Tips und Tricks“. Der Menüeintrag sollte nur aus dem Intranet erreichbar sein – sprich es sollte ein Hinweis kommen, wenn dieses Menü aus dem Internet aufgerufen wird, dass man keinen Zugriff hat. Geht sowas?????

    Danke schon mal für die Hinweise :-)

  4. Hallo,

    danke für eure Sicherheitstipps, die ich gerne übernommen habe.

    Bei mir ist ein größeres Problem aufgetreten. Vielleicht könnt ihr helfen? Ich habe nach eurem Tipp „6. Den wp-content Ordner schützen“ das Problem, dass Icons bei mir nicht mehr angezeigt werden. Dies betrifft mein gekauftes Theme im Frontend (im WordPress Standard-Theme passiert dies nicht) als auch Icons eines Plugins im Backend.

    Gibt es hierfür eine Lösung oder muss ich auf den Schutz des wp-content Ordners verzichten)

    Danke nochmal für die guten Tipps

  5. Der Eintrag zur Unterdrückung der Fehlermeldung (php_flag display_errors Off), löst bei mir (php Version 5.6.13) erst einen „500 Internal Server Error“ aus.

    Jemand eine Idee dazu?

    Ansonsten, sehr gute und einfache Tricks! Danke!

  6. herzlichen Dank für diesen klar verständlichen und nützlichen Beitrag,
    auch ich habe auf blog.weintz.de die Sicherheitsfeatures aktiviert und fühle mich nun sicher.
    Gruß
    Norbert

  7. Durchsuchen von Verzeichnissen verbieten: Options All -Indexes

    Danke für den nützlichen Artikel.

  8. FYI; Man lese auch:

    When (not) to use .htaccess files

    http://httpd.apache.org/docs/current/howto/htaccess.html

  9. Welches Programm ist unter „Vorbereitung“ abgebildet?

    • @Pascal: Unter dem letzten Punkt „Zugabe“ ist an Punkt 2 die wp-config.php mit abgesichert. Als einzigen Punkt würde ich sonst noch beim Absichern des „wp-content“ Ordner das .PDF Format mit rein nehmen. Und dann testen, testen, testen. Dann weißt Du schnell, was noch fehlt. Aber bedenke: nimmst Du .PHP mit rein, kannst Du Dir die Geschichte sparen.

      @ati: Das ist Transmit, ein kostenpflichtiges FTP-Programm für Mac OS X. Funktioniert echt klasse! Kriegst Du hier: http://panic.com/transmit/

  10. Zu Tipp 6) ist zu beachten, dass hier alle gewünschten Dateitypen eingetragen werden sollten. Sonst ist Ärger vorprogrammiert, wenn z. B. PDF-Dateien nicht mehr abrufbar sind.

    • Und wie sieht das dann genau aus? Welche Endungen sollten in jedem Fall mit rein genommen werden?
      Ich würde gerne den Bereich absichern…

      Zu 1) habe ich mal woanders gesehen, dass man auch ruhig die config.php mit absichern sollte. Kann mir einer zeigen, wie ich beide Dateien also Config und htaccess absichern kann?

  11. Und für die Performance noch mod_deflate aktivieren, damit bestimmte Datei-Typen komprimiert werden.

    AddOutputFilterByType DEFLATE text/html text/css text/xml application/x-javascript application/x-httpd-php

Tut uns leid, aber die Kommentare sind geschlossen...

Kennst du schon unseren Newsletter?

Hinweise zum Datenschutz, also dem Einsatz von Double-Opt-In, der Protokollierung der Anmeldung, der Erfolgsmessung, dem Einsatz von MailChimp als Versanddienstleister und deinen Widerrufsrechten findest du in unseren Datenschutzhinweisen.

Cookies

Weitere Informationen zu den Auswahlmöglichkeiten findest du hier. Dazu musst du zunächst keine Auswahl treffen!

Um Dr. Web zu besuchen, musst du eine Auswahl treffen.

Deine Auswahl wurde gespeichert!

Informationen zu den Auswahlmöglichkeiten

Was du erlaubst!

Um fortfahren zu können, musst du eine Auswahl treffen. Nachfolgend erhältst du eine Erläuterung der verschiedenen Optionen und ihrer Bedeutung.

  • Ich stimme zu:
    Du erlaubst uns das Setzen aller Cookies, die wir in unseren Datenschutzhinweisen genannt haben. Dazu gehören Tracking- und Statistik-Cookies. Aus dem Tracking per Google Analytics bieten wir auf der Seite Datenschutz ein Opt-Out, also die Möglichkeit der Abmeldung, an.
  • Ich stimme nicht zu:
    Wir verzichten bei dieser Option auf den Einsatz von Google Analytics. Die für den Betrieb von Dr. Web notwendigen Cookies werden aber dennoch gesetzt. Einzelheiten entnimmst du bitte den Datenschutzhinweisen

Du kannst deine Cookie-Einstellungen jederzeit hier ändern: Datenschutz. Impressum

Zurück