Dude, wo ist meine PHP-Variable?

Heute gibt es einen Beitrag aus der Kategorie „PHP sicherer machen“: PHP empfiehlt, auf globale $_SERVER-Variablen nicht direkt zuzugreifen, um keine Angriffspunkte in der eigenen PHP-Anwendung zu bieten. Da ich gerade an einem Script arbeite, in dem solche Variablen vorkommen, habe ich also z. B.

$_SERVER['SCRIPT_FILENAME']

durch

filter_input(INPUT_SERVER, 'SCRIPT_FILENAME', FILTER_SANITIZE_STRING)

ersetzt.

Und, schwuppdiwupp, …verschwanden alle geänderten Variablen auf ganz magische Weise – womit ich sagen will, dass kein Output zurückgegeben wurde. Nichts. NULL.

Nach längerer, ergebnisloser Fehlersuche im Code kam heraus, dass das Ganze einem PHP-Bug geschuldet ist. In Server-Konfigurationen, in denen PHP als FastCGI-Client läuft (so wie hier), kann es vorkommen, dass die filter_input()-Funktion nicht das tut, was sie soll, bzw. gar nichts tut. Schlimm – der Fehler ist offensichtlich schon seit längerer Zeit bekannt:

It seems this bug still appears in PHP v5.4.24 and has done for over 6 years

Das kann nicht wahr sein. 6 Jahre? Echt jetzt, PHP? Na, dann können wir wohl, in unmittelbarer Zukunft, mit einem Patch rechnen. :/

PS: Vielleicht sollte ich erwähnen, dass das betroffene Script auf einem Server mit PHP 5.6.10 läuft. Uhmm.

Nachtrag 5.12.2015: Mittlerweile ist PHP in der Version 7 erschienen. Ein kurzer Test zeigt, dass der Fehler weiterhin besteht. Tja, da geht das letzte bisschen Hoffnung von dannen. :facepalm:

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s