Archiv der Kategorie: PHP

register_globals in PHP 5.5 nutzen

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

Using register_globals in PHP 5.5

From a security point of view, it’s not worth discussing the benefits and risks of using register_globals in PHP. It was just a matter of time the PHP team would completely remove this controversial feature. And so they did, register_globals had been deprecated as of PHP 5.3 and removed as of PHP 5.4.

Anyway, there are a few situations in which you would like to update to the latest PHP version (> 5.4) but not get lost of the register_globals feature – e.g. when you are not allowed to change the code of a script that requires register_globals = on or if it’s just too much (unpaid) work to find and edit all related code parts.

Assuming that you follow common security principles, this workaround will bring back register_globals functionality to PHP 5.4+:

  • Create an empty file register_globals.php in your PHP include directory (e.g. /usr/share/php).
  • Put this code into register_globals.php:
<?php extract($_REQUEST); ?>
  • If you want to make more variables become global then simply add other global arrays, e.g.:
<?php 
extract($_REQUEST);
extract($_SERVER);
extract($_SESSION);
?>
  • Add this directive to the end of your php.ini:
auto_prepend_file = 'register_globals.php'
  • Restart Apache:
sudo /etc/init.d/apache2 restart
  • or
sudo apachectl restart