Was bewirkt die Option register_globals?

Wenn register_globals eingeschaltet ist, werden alle Werte, die per URL oder Formulare an das PHP-Programm übergeben werden, direkt als globale Variablen deklariert. Dadurch könnten unter Umständen Variablen überschrieben werden, die einen Include-Pfad enthalten. Dadurch kann ein neuer Inhalt in eine Seite 'injiziert' werden (so genanntes Code-Injection), der vom Betreiber gar nicht beabsichtigt ist und oft auch unbemerkt bleibt. So kann die Seite mißbraucht werden, um zum Beispiel Spam- oder Phishing-Mails zu verschicken. Es ist also eine Sicherheitslücke.

Ist die Option register_globals ausgeschaltet, wird die Sicherheit erhöht, weil die Werte die per URL oder Formulare an das PHP-Programm übergeben werden, in eine Systemvariable gelegt werden. Dadurch kann die globale Variable nicht verändert werden und somit auch nicht mehr für Code-Injection mißbraucht werden. Der Nachteil hierbei ist, dass alte PHP3 oder PHP4-Programme eventuell nicht mehr laufen, da es die Sytemvariablen früher nicht gab oder sie bei neueren PHP-Versionen schlichtweg bei der Programmierung nicht verwendet wurden.

Die Option allow_url_fopen zielt genau auf das obige Szenario. Wenn man das ausschaltet, kann der include-Befehl nichts mehr laden, was mit http:// oder ftp:// usw. beginnt. Das Sicherste ist also die Kombination: register_globals einschalten und allow_url_fopen ausschalten. Dadurch können ältere PHP-Programme wieder benutzt werden, ohne das fremder Code ohne Weiteres eingespielt werden kann. Der Nachteil ist, das Programme, die Daten von anderen Seiten holen, dann nicht mehr funktionieren.

register_globals = ein und allow_url_fopen = ein ==> sehr gefährlich

register_globals = ein und allow-url_fopen = aus ==> verhindert Code-Injection, aber nicht das Hacking. Programme könnten von außen beeinflusst werden, so dass sie z.B. Daten ausgeben, die nicht sichtbar sein sollten.

register_globals = aus und allow_url_fopen = ein ==> relativ sicher. Durch Programmierfehler kann jedoch Code-Injection wieder möglich sein.

register_globals = aus und allow_url_fopen = aus ==> die sicherste Variante.