register_globals

  • Seit den neueren Versionen von PHP ist die Option register_globals in der Konfiguration standardmäßig auf Off gestellt. Deswegen kommt es durchaus vor, dass einige Skripte plötzlich nicht mehr funktionieren, wie sie es vorher taten. Dies bedeutet nun natürlich nicht, die Option einfach wieder mit On zu aktivieren, denn der Grund der "neuen" Konfiguration ist der Sicherheitsaspekt. Das Problem bei den alten Skripten sind plötzlich leere Variablen, die man per GET, POST usw. eigentlich mit Werten belegt erwartet hätte. Ab sofort bzw. mit register_globals = Off können die Werte der übergebenen Variablen aus assoziativen Arrays geholt werden: <#$>_GET, <#$>_POST und <#$>_COOKIE. Dazu wird einfach der Variablen-Name als Schlüssel benutzt: <#$>_GET['dummy']. Folgendes Skript nenne ich einfach einmal dummy.php. Ruft man es nun mit dummy.php?dummy=nachricht auf, so wird nachricht ausgegeben. Natürlich funktioniert das ganze auch bei aktivierten register_globals. dummy.php:<?php<#$>msg = <#$>_GET['dummy'];echo <#$>msg;?> Und was hat das nun mit Sicherheit zu tun? Ganz einfach: Böswillige Benutzer können (wie oben in der Adresse) Variablen an das Skript übergeben. Und auch wenn die Wahrscheinlichkeit gering ist, ist es möglich, wenn der Programmierer unbelegte Variablen nutzt, den Ablauf eines Skriptes unerwünscht zu beeinflussen. Zu beachten ist, dass bei deaktivierten register_globals trotzdem vom Anwender Falscheingaben getätigt werden können und vom Skript abgefangen werden müssen. Sie sollten also weiterhin nicht blind darauf vertrauen, was in übergebenen Variablen steht.