Unter reinen Sicherheitsaspekten lohnt es sich wohl kaum, über die Vor- und Nachteile von register_globals in PHP zu diskutieren. Es war eigentlich nur eine Frage der Zeit, bis das PHP-Team dieses umstrittene Feature komplett entfernen würde – und das tat es schließlich auch, register_globals ist seit PHP 5.3 „deprecated“ und wurde mit Version 5.4 ganz entfernt.
Dennoch gibt es einige wenige Situationen, in denen man gerne auf die aktuellste PHP-Version (> 5.4) updaten möchte, ohne aber die register_globals-Funktionalität zu verlieren – zum Beispiel dann, wenn man den Quellcode nicht verändern darf und das Script register_globals = on voraussetzt. Oder aber für den Fall, dass es schlichtweg einen zu hohen (unbezahlten) Aufwand bedeuten würde, alle Stellen im Code zu finden und entsprechend zu überarbeiten.
Unter der Annahme, dass man einschlägige Sicherheitsgrundsätze beachtet, bringt dieser Workaround die register_globals-Funktionalität für Versionen >= PHP 5.4 zurück:
- Legen Sie die leere Datei register_globals.php in Ihrem PHP-Includeverzeichnis an (z.B. /usr/share/php).
- Fügen Sie diesen Quellcode in die Datei register_globals.php ein:
<?php extract($_REQUEST); ?>
- Wenn Sie weitere Variablen global verfügbar machen wollen, fügen Sie einfach weitere globale Arrays hinzu, deren Elemente per extract() in globalisierte Variablen umgewandelt werden, z.B.:
<?php
extract($_REQUEST);
extract($_SERVER);
extract($_SESSION);
?>
- Fügen Sie diese Anweisung am Ende Ihrer php.ini ein:
auto_prepend_file = 'register_globals.php'
- Starten Sie Apache neu:
sudo /etc/init.d/apache2 restart
- oder
sudo apachectl restart