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 Programmierer 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
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
error_reporting(E_ALL);
$inhalt = "";
$inhalt = "Hallo Welt";
echo "Ausgabe: ". $inhalt;
?>
Das Einschalten der Fehlermeldungen läuft über:
<?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
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
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:
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 https://www.php.net/manual/de/ini.php zu finden.
Wenn Sie einen Fehler finden, bitte mitteilen (egal ob Schreibfehler oder inhaltlicher Fehler).
Mit Maus fehlerhafte Stelle markieren und übernehmen mit folgendem Button: