Artikelformat

display_errors = off – ja, aber …

Wenn 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

    • 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.

  1. 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.

    Antworten

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.