Posted by on in Tips & Tricks

PHP Skripte mit mod_rewirte und SEF-Urls vor Angriffe schützen

Durch die stetig wachsende Open-Source Gemeinde steigt auch die Anzahl an bekannten Schwachstellen in Skripte. Dies bedeutet das Hacker, Skriptkiddies und andere böswillige Personen oder Bots es leichter haben einen Schadcode, in welcher Form auch immer, einzuspielen. Man muss nur nach bestimmte Dateinamen googlen und bekommt hunderte von Seiten die man theoretisch Angreifen könnte. Auf ein Beispiel hierfür wird mal verzichtet.

Ich möchte hier eine einfache Möglichkeit zeigen wie man den Direkten Zugriff verschleiern kann, indem man vorgaukelt dass die Datei nicht existiert.

Dies setzt zwei Dinge voraus:
Erstens muss mod_rewrite verfügbar bzw. aktiviert sein. Und die Webseite oder Anwendung muss die PHP-Dateien/-Endungen vollständig in SEF-Urls umwandeln. Mit Joomla!, Typo3 oder Drupal sollte das Grundsätzlich kein Problem darstellen.

Wenn diese Dinge erfüllt sind muss man in die .htaccess Datei nur noch folgendes ergänzen.

# mod_rewrite aktivieren.
RewriteEngine On

# den Zugriff auf index.php erlauben.
RewriteCond %{REQUEST_URI} !/index.php

# Den Zugriff auf weitere PHP-Skripte, falls notwendig erlauben.
# RewriteCond %{REQUEST_URI} !/unterordner/zugriff_erlauben.php

# Bei allen anderen PHP-Dateien den Status 404 (Not Found) zurückgeben.
# Die 404.html ist nur ein Platzhalter. 
# 404.html kann entfernt werden um ggf. eigene 
# Fehlerdokumente anzuzeigen. z.B. mit (RewriteRule ^(.*).php$ [R=404,L])
RewriteRule ^(.*).php$ 404.html [R=404,L]

Damit liefert der Webserver bei allen PHP-Dateien, mit Ausnahme von der index.php (und ggf. zusätzlich definierte) den Status-Code 404 (Not Found) zurück, egal ob die Datei existiert oder nicht.

Wie aber bereits erwähnt muss sichergestellt sein das SEF-URLs vollständig durchgezogen werden. Vor allem bei Abfragen via Ajax oder in Formularen werden oft keine SEF-Urls verwendet.

Ich habe das ganze länger beobachtet und konnte einen erheblichen Rückgang bei Zugriffen solcher potenziell gefährdeten Dateien feststellen. Denn wenn eine Datei scheinbar nicht vorhanden ist, werden diese erstens mit dem 404 Status auf keinen Fall von Suchmaschinen indiziert und zweitens meint der Angreifer, das es die Datei wohl nicht gibt und probiert es meist erst gar nicht mehr weiter.

Trackback URL for this blog entry.