Unterdrücken von PHP-Fehlermeldungen

Fehlermeldungen können erfahrenen Angreifern sehr viel verraten und durch die entsprechenden Schlussfolgerungen dann den Angriff erfolgreich verlaufen lassen. Daher sollten Sie nach der Entwicklungsphase tunlichst die Fehlerausgabe abschalten. Intern können Sie die Fehlerausgabe nutzen (z.B. per Mail an den Programmier etc.). Einige Provider haben standardmäßig die Fehlermeldungen von Anfang an deaktiviert (z.B. Goneo), bei anderen Providern ist standardmäßig die Fehlermeldung aktiviert (z.B. 1&1).

ALLE Fehlermeldungen bei der Entwicklungsphase anzeigen

Während der Entwicklungsphase sollten ALLE Fehlermeldungen (auch die Warnungen) angezeigt werden. Dadurch fallen auch undefinierte Variablen schnell auf. Die typische Fehlermeldung ist dann

Notice: Undefined variable: inhalt in D:\xampp\htdocs\sicherheit\error-reporting-01.php on line 3

Das Programm dazu:

PHP-Quellcode
<?php
error_reporting(E_ALL);
echo "Ausgabe: ". $inhalt;
?>

Der Vorteil daran ist, dass man sofort sieht, wo man mit undefinierten Variablen arbeitet. Und diese Variablen können im schlechtesten Fall von außen gesetzt werden und der Angreifer kann viel Spaß damit haben. Allerdings hat der Programmierer dadurch herzhaft undefinierte Zustände. Daher macht es Sinn, die Variablen zu initialisieren (wie es in den meisten Programmiersprachen Pflicht ist).

PHP-Quellcode
<?php
error_reporting(E_ALL);
$inhalt = "";
$inhalt = "Hallo Welt";
echo "Ausgabe: ". $inhalt;
?>

Das Einschalten der Fehlermeldungen läuft über:

PHP-Quellcode
<?php
error_reporting(E_ALL);
ini_set("display_errors", "on");
ini_set("display_startip_errors", "on");
?>

php.ini – Einstellungen für das Error-Reporting

Wenn man Zugriff auf die php.ini hat, können auch dort die entsprechenden Einstellungen vorgenommen werden.

In der php.ini finden sich die Einträge:

error_reporting  =  E_ALL
display_errors = On
log_errors = On
error_log = c:\apachefriends\xampp\apache\logs\phperror.log

(diese Einträge kommen von der lokalen XAMPP-Installation. Auf dem Server hat man bei der Angabe des error_log natürlich keinen Windows-Pfad.

Wenn man bei seiner Installation nicht weiß, wo die genutzte php.ini-Datei liegt, hilft

PHP-Quellcode: phpinfo
<?php
phpinfo();
?>

Hier ist gleich im ersten Block angegeben, wo die php.ini-Datei liegt. In meiner XAMPP-Windows-Installation unter d:\xampp\apache\bin\php.ini

Speicherort php.ini über phpinfo() ermitteln

Dort findet sich der Eintrag im Bereich Error handling and logging:

error_reporting  =  E_ALL & ~E_NOTICE

Das bedeutet, er zeigt alle Fehler, aber ohne (das bedeutet die Tilde ~) die Notizen. Wir wollen aber auch die Notizen, damit wir alle undefinierten Variablen mitbekommen.

display_errors = On

Die Fehler werden als Teil der Ausgabe auf dem Bildschirm mit ausgegeben. Während der Entwicklung OK, später nein. Wir wollen dem Angreifer keine Hilfestellungen geben.

log_errors = Off

Es gibt die Möglichkeit, die Fehler in eine Log-Datei schreiben zu lassen. Dabei sollte man sich Gedanken machen, ob man auch regelmäßig sich diese Log-Datei zu Gemüte führt oder ob es sich um ein Kundenprojekt handelt, wo der Kunde möglichst wenig laufende Kosten haben will und das Log-File vergessen wird und über die Zeit zu ungeahnten Größen wächst und selber irgendwann ein Problem darstellt.

;error_log = "\xampp\apache\logs\phperror.log"

Durch das Semikolon am Anfang auskommentiert. Wir schalten die log_errors auf On und nutzen die Datei „phperror.log“

error_reporting  =  E_ALL
log_errors = On
error_log = "\xampp\apache\logs\phperror.log"

Bevor in die Datei geschrieben wird, muss der Apache wieder frisch gestartet werden, damit die neuen Einstellungen übernommen werden.

Danach erscheint (einfach suchen über STRG + f) unter error_log der Pfad und und bei log_errors sollte On stehen:

error-logs kontrollieren und Speicherort Errors anzeigen

Unter Angabe von Datum und Uhrzeit erscheint nun unser Fehler (immer noch vom ersten Programm mit der undefinierten Variablen)

[03-Dec-2008 15:05:41] PHP Notice: Undefined variable: inhalt in D:\xampp\htdocs\sicherheit\error-reporting-01.php on line 3

Eine Auflistung der php.ini und die Bedeutung der einzelnen Einstellungen ist unter http://de3.php.net/manual/de/ini.php zu finden.

eBook PHP-Kurs.com

Video-Tutorial: über 200 Videos, Gesamtspielzeit über 23 Stunden
Jetzt Video-Kurs PHP-Tutorial auf DVD bestellen

PHP Videokurs - programmieren lernen einfach