Sven Rautenberg: Warum $_GET und register_globals

Beitrag lesen

Moin!

- schalte beim Entwickeln register_globals aus. So musst Du zwangsläufig
   auf $_GET, $_POST, $_COOKIE, $_SESSION und $_SERVER zurückgreifen, dann
   weißt Du aber auch _genau_, woher eine Variable kommt und woher nicht.
   Siehe dazu: http://de3.php.net/manual/de/security.registerglobals.php

Weils gerade so schön in den Kontext passt, will ich mit dieser Anweisung mal etwas aufräumen.

Die zusätzliche Sicherheit entsteht nicht, weil man auf $_GET & Co. zugreift, sondern weil register_globals abgeschaltet ist. Denn nur dann werden Userangaben in GET-, POST- oder Cookies nicht in den globalen Namensraum importiert.

Man kann aber noch so explizit auf seinem Entwicklungsserver auf $_GET etc. zugreifen - wenn der produktive Server beim Provider register_globals eingeschaltet ist, kann man sich immer noch tolle Sicherheitslücken einbauen, weil der Transfer von externen Daten in den globalen Variablenraum eben möglich ist.

Also: register_globals ausschalten ist das Wichtige (und die Verwendung von $_GET etc. damit erzwungen, aber im Prinzip nur nebensächlich).

Unter http://de3.php.net/manual/de/security.php sind noch ein paar detailierte Informationen zum Thema zusammengestellt.

Das, was da unter http://de3.php.net/manual/de/security.registerglobals.php an Beispielen steht, sieht für meine Augen auch noch nicht so wahnsinnig sicher aus, was sicherlich auch daran liegt, dass es um Authentifizierung geht, aber nirgendwo wirklich z.B. der Username geprüft wird. Die Beispiele dort sind also schlecht! Es ist nicht einsichtig, warum der Zugriff auf $_GET etc. irgendwelche weitere Sicherheit bringt. Denn auch Cookiedaten kann man als Angreifer manipulieren - sind ja schließlich nur Bestandteile des HTTP-Requests, ungeschützt, unverschlüsselt, benutzerdefiniert (im weitesten Sinne).

- Sven Rautenberg

--
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)