PHP absichern

So wird PHP sicherer

Die Script-Sprache PHP ist eine wesentliche Voraussetzung für dynamische Webinhalte. PHP gilt allerdings als nicht besonders sicher. Doch es gibt einige Pflichtmaßnahmen, die die Sicherheit von PHP-Scripts deutlich erhöhen.

Programme wie Wordpress oder Typo 3 basieren in weiten Teilen auf PHP. Seit der ersten Veröffentlichung im Jahr 1995 wurde der Hypertext Preprocessor zu einem der wichtigsten Werkzeuge bei der Entwicklung von dynamischen Webseiten. Mit PHP-Programmen ist viel möglich, doch sorgen besonders Funktionen immer wieder für Ärger, mit denen sich Inhalte aus Datenbanken auslesen und bearbeiten lassen. Angreifer nutzen dabei oft gerade entdeckte Sicherheitslücken. Häufig öffnet aber sträflicher Leichtsinn des Administrators das Tor für erfolgreiche Angriffe.

Sichern Sie die PHP-Installation ab

Ob Sie einen lokalen Webserver betreiben, der nur für wenige Stunden öffentlich zugänglich ist, oder mit einem dedizierten Server bei einem Provider arbeiten: Lücken in PHP werden von Bots und automatisierten Scripts immer auch als Sprungbrett genutzt, um tiefer in andere Systeme einzudringen. Eine sichere PHP-Umgebung beginnt mit der Konfiguration der Bibliotheken. Wenn Sie sich die aktuelle PHP-Konfiguration ansehen wollen, legen Sie mit einem Editor Ihrer Wahl eine Datei mit beliebigem Namen und der Endung „.php“ an. In die Datei schreiben Sie:

<?
phpinfo();
?>

Die Datei laden Sie dann etwa in das Verzeichnis „/var/www/“ beziehungsweise „/var/www/html/“ hoch. Rufen Sie dann mit einem Browser die Datei von Ihrem Server ab. PHP liefert nun alle Einstellungen übersichtlich aus und zeigt auch Hinweise auf installierte Module.

PHP-Infodatei auf dem Server: Drei Zeilen PHP-Code genügen, um sich die aktuelle Konfiguration von PHP auf dem Server anzusehen.
PHP-Infodatei auf dem Server: Drei Zeilen PHP-Code genügen, um sich die aktuelle Konfiguration von PHP auf dem Server anzusehen.

Als Einstellungszentrale für PHP dient die Datei „php.ini“, die auf Linux-Systemen meist im Verzeichnis „/etc/“ liegt. Unter Ubuntu etwa finden Sie die Datei unter „etc/php5/apache2“, sofern mit dem Apache-Server gearbeitet wird. In dieser „php.ini“ suchen Sie nach dem Eintrag „register_globals“ und ändern den Wert zu „register_globals = Off“. Ist die Zeile bisher nicht vorhanden, legen Sie sie neu an. Damit vermeiden Sie, dass ein Angreifer auf die Parameter aus einer URL direkt zugreifen kann, um sie für eigene Zwecke zu nutzen. Ahnt ein Angreifer das Vorhandensein eines Scripts oder ist dessen Existenz bekannt (etwa im Fall von Standardsoftware), kann er ihm eigene Variablen übergeben, ohne dass diese erst definiert werden müssten. Schalten Sie außerdem die Anzeige von Fehlermeldungen aus. Denn die Fehlermeldungen im Browser liefern Hackern und Angreifern wichtige Informationen, die sich eventuell kreativ ausnutzen lassen. Auf einem Produktivsystem, das im Web erreichbar ist, sollte daher in der „php.ini“ die Anweisung „display_errors=“ auf „Off“ gesetzt sein.

HTML-Ausgabe von phpinfo(): Der Server liefert auf einer übersichtlichen Seite alle Einstellungen und Komponenten der PHP-Installation aus.
HTML-Ausgabe von phpinfo(): Der Server liefert auf einer übersichtlichen Seite alle Einstellungen und Komponenten der PHP-Installation aus.

Weisen Sie neugierige Blicke zurück

Viele Sicherheitsprobleme erwachsen aus einer unzureichend abgesicherten Installation des Webservers oder aus unverhältnismäßigem Vertrauen in die Nutzer. Bei der Entwicklung eines Scripts sollte darauf geachtet werden, dass alle externen Informationen und Elemente außerhalb der Hierarchie des Ordners für Webdokumente abgelegt werden. Damit der Server Seiten und Scripts ausliefern kann, müssen diese im Ordner „/var/www“ liegen. Das gilt aber keineswegs für Bildreferenzen oder andere Dateien. Greifen Sie mit absoluten Pfadangaben darauf zu.

Verbieten Sie zusätzlich dem Nutzer das Blättern in Verzeichnissen. Machen Sie die Probe aufs Exempel: Wo Sie ein Dokument mit der Adresse „www.name.tld/verzeichnis/name.htm“ im Web abrufen können, lassen Sie einfach versuchsweise den Namen der Datei weg. Sie werden überrascht sein, auf wie vielen Servern Sie anschließend die gesamte Verzeichnisstruktur sehen können. Um solches Blättern zu verbieten, schützen Sie die Verzeichnisse des Servers durch das Anlegen der Datei „.htaccess“. In dieser verwenden Sie diese Anweisung:

Options –Indexes

Das verbietet das Anzeigen von Verzeichnisinhalten.