Rolf B: PHP register_globals

Beitrag lesen

Hallo klawischnigg,

register_globals tut ja nichts weiter, als die Einträge von $_REQUEST in globale Variablen zu kopieren. Was gefährlich ist, weil damit Variablen injiziert werden, die man ggf. gar nicht kennt. Oder die man selbst nicht initialisiert, weil man erwartet, dass sie bei erster Verwendung uninitialisert erzeugt werden.

Die stumpfe Lösung ist eine Schleife zu Beginn des Scripts, die über Einträge von $_REQUEST läuft und globale Variablen draus macht.

Das hier könnte gehen:

for ($_REQUEST as $name => $value) {
   $$name = $value;
}

Ob die Zuweisung an $$name eine Variable FOO anlegt, wenn in $name "FOO" drin steht, müsste man sich anschauen. Was bis PHP 8.0 ging und ab 8.0 blockiert wird, ist eine Zuweisung an $GLOBALS[$name].

Diese Lösung ist gefährlich und nicht zu empfehlen

Die weniger stumpfe und sicherere Lösung ist die Analyse, welche Variablen das Script erwartet und ein paar Zeilen, die die entsprechenden $_REQUEST-Inhalte in globale Variablen überträgt. Damit kann man dann nicht mehr beliebige Variablen anlegen.

Aber ich befürchte, dass Du diese Analyse nicht hinkriegst (weil der Kot zu verquirlt ist). Denn WENN Du sie hinkriegst, kannst Du ja jede Variable $name, für die Du die Bestückung durch register_globals erwartest, durch $_REQUEST['name'] ersetzen.

Rolf

--
sumpsi - posui - obstruxi