display_errors = off – ja, aber …
4. Juni 2010 – 21:55Wenn es um die Sicherheit einer PHP Webapplikation geht gehört neben register_globals auch display_errors zu den Direktiven die man auf jeden Fall auf “off” setzen sollte. Ich meine mich sogar zu erinnern, dass dies beim ZCE-Test abgefragt wird. Was tut man aber nun, wenn doch einmal ein Fehler auftritt, der nicht von den hoffentlich vorhandenen Logging-Mechanismen festgehalten wird? Und genau hier möchte ich ansetzen.
Die php.ini ist immer wieder spannend zu durchforsten und hier findet man auch eine Lösung für das benannte Problem. Es gibt eine Direktive, die nennt sich ganz einfach log_errors. Interessanterweise ist es so, dass diese recht oft auf on steht, aber error_log auskommentiert ist. Und dies sollte auf einem Produktivsystem nicht der Falls sein. Denn wenn ein Fehler auftritt kann man hiermit angeben, wo die Datei liegt, in der man diesen Fehler loggen möchte.
Nun hat man aber keinen Zugriff auf die php.ini und möchte diese schöne Funktion trotzdem nutzen. Also nutzt man in seiner Applikation beim Bootstrap ini_set und überschreibt die log_errors und error_log Einstellung der php.ini Datei. Somit kann man auftretende Fehler analysieren und man braucht keine Angst mehr vor der weißen Seite bei einem Fehlerhaften Aufruf zu haben.
Apropos logging. PHP bietet die Funktion error_log an. Damit kann man sich ein simples Logging System inkl Mailversand des Fehlers aufbauen. Ich bin zwar eher Freund eines richtigen und feingranular steuerbaren LoggingFrameworks, aber die Boardmittel von PHP sind durchaus ausreichend.




4 Kommentare zu “display_errors = off – ja, aber …”
Über eine .htaccess kann man diese Option auch recht einfach und global abändern, sofern man den Apache verwendet
geschrieben von killerbees19 am 05. Jun, 2010
Stimmt, diese Option gibt es auch noch. Hat den Vorteil, dass man die Änderung der php.ini Werte so nicht im Programmcode hinterlegen muss. Und Zugang zur htaccess-Datei hat man (insbesondere bei Webspace Anbietern) eher als zur php.ini.
geschrieben von Norbert am 05. Jun, 2010
Die PHP eigenen Funktionen bieten sich auch an Stellen an, an denen z.B. der “richtige” Logger noch nich initialisiert ist. Das Error-Log des Apachen gibt oft auch schon wichtige Informationen.
geschrieben von Daniel am 05. Jun, 2010
Also beim Apache funktioniert es auch nur, wenn man 1. htaccess Dateien und 2. das Überschrieben der Optionen zulässt!
geschrieben von ragtek am 16. Jun, 2010