Hi,
ob $a sofort verfügbar ist, oder erst "abgeholt" werden muß ändert doch nichts am Inhalt von $a? Sprich die Variale ist genauso beliebig von außen manipulierbar: wenn ich jetzt böswillig "?a=<script>lösche Datenbank</script>" anhänge passiert das gleiche ob GLobals on oder Off gesetzt sind.
nein. Du hast die wesentliche Aussage wohl überlesen:
dass man damit beliebe Inhalte in Dein Skript einschleusen könnte, wenn Du Deine Variablen vor der ersten Benutzung nicht initialisierst.
Wenn Dein Script z.B. so aussieht:
if(isset($_POST['passwort']) && $_POST['passwort']=='geheim') $admin=true;
und weiter hinten dann:
if(isset($admin) && $admin) #lösche Datenbank
dann kann bei register_globals=on ein User ?admin=1 an die URL hängen und prompt ist die Datenbank weg... (Schlampige Programmierer verzichten auch auf die isset-Abfrage, zumal wenn das error_reporting deaktiviert ist).
Es geht hierbei ja gar nicht um _erwartete_ URL-Variablen, sondern eben um Variablen, die vom Script selbst angelegt und genutzt werden.
Auch gerne gesehen:
$text .= $_GET['text']
bei register_globals=on ohne vorherige Initialisierung $text='' ist die Eingabe veredoppelt.
Ich hatte es auch schon mit einem CMS zu tun, das bei register_globals=on fehlerhaft lief, wenn ich ein Formularfeld mit einem vom Script verwendeten Namen eingebaut hatte. Wie ich dann gesehen hatte, umschifften andere Autoren dieses Problem durch kryptische Feldnamen wie xyztext... ;-)
freundliche Grüße
Ingo