Ingo Turski: Verständinsfrage $_GET /$_Post Globals on oder off

Beitrag lesen

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