| | | | |
| |||||||
| Beitragsarchiv Nur gucken, nichts anfassen. Das Archiv der Beiträge vergangener Zeiten. |
| | LinkBack | Themen-Optionen |
| | |||
| Erfahrener Benutzer Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse: Fortgeschritten ![]() | Das Tutorial wurde geschrieben von: fantast -------------------------------- register_globals ist eine Direktive, die in der Konfigurationsdatei von PHP, php.ini, verwendet wird und das Verhalten von PHP zu externen Variablen, genauer gesagt, Daten die im HTTP-Request mitgeschickt wurden, regelt. Bei diesen externen Variablen handelt es sich um: 1. GET-Daten: Variablen, die ans Ende der URL angehangen werden (Bsp.: http://www.phpfriend.de/forum/viewforum.php?f=2). 2. POST-Daten: Variablen, die mit Hilfe des POST-Feldes in einem HTTP-Request an den Server übergeben werden. 3. Cookies: Ähnlich wie POST-Daten werden auch Daten aus Cookies mit dem HTTP-Request an den Server übergeben. 4. Session-Daten: Alle Variablen die in einer Session gespeichert werden. 5. Umgebungsvariablen: Alle Variablen, die auf dem Server als Umgebungsvariablen registriert sind. Wenn register_globals auf "on" gestellt ist, so wie das bei allen PHP-Versionen vor 4.1.0 standardmässig der Fall war, werden all diese Variablen direkt registriert. Das heisst man kann dann einfach über den Variablennamen auf sie zugreifen. Beispiel: Zitat:
Variable "list". Sie hat den Wert "1". Innerhalb des Scriptes ist sie als $list zu sehen, kann ausgelesen und verändert werden. Das Gleiche funktioniert mit allen anderen externen Variablentypen. Auf den ersten Blick scheint dieses Verhalten sehr sinnvoll, sind doch sämtliche Variablen im Script direkt verfügbar. Leider tun sich durch diese Möglichkeit riesige Sicherheitslücken auf, die nur mit grösster Sorgfalt und unverhältnismässigem Aufwand gestopft werden könnten. Beispiel: PHP-Code: Zugriff berechtigt ist. Mit register_globals on wäre folgende Attacke möglich: Zitat:
steht daher auch im Sciprt zur Verfügung. Daher wird die Funktion check_user() überhaupt nicht ausgeführt. Und da die Variable ausserhalb des Scriptes auf "true" gesetzt wurde, ist sie es innerhalb des Scriptes auch, man hat also mit einfachsten Mitteln den Sicherheitstest umgangen. Beispiel 2: PHP-Code: die Variable $username aus den Session-Daten geladen wird. Wenn man jetzt aber wie im ersten Beispiel wieder per GET den String ?username=admin hinten an die URL hängt, wird die Variable $username im Script auch den Wert "admin" haben, auch wenn der User sich noch gar nicht eingeloggt hat, geschweige denn wirklich der Administrator ist. Da genau solche Dinge passieren können und passieren, wurde, wie oben erwähnt, register_globals ab Version 4.1.0 auf "off" gesetzt. Das heisst allerdings, dass es auch wieder aktivieren kann, hiervon soll allerdings dringendst abgeraten sein. Die neue, bevorzugte und deutlich sichere Methode auf externe Variablen zuzugreifen ist der Weg über die Superglobals. Es gibt für jeden der fünf externen Variablentypen ein Array, welches beim Start des Scriptes automatisch definiert und mit den entsprechenden Daten gefüllt wird. Diese Arrays heissen: für GET-Daten: $_GET für POST-Daten: $_POST für Cookies: $_COOKIE für Session-Daten: $_SESSION für Umgebungsvariablen: $_ENV Desweiteren gibt es noch das Array $_REQUEST, welches die drei Arrays $_GET, $_POST und $_COOKIE in einem vereint, $_SERVER, welches Informationen über den Server liefert und $_FILES, welches Dateien beinhalten, welche per POST an den Server übertragen worden sind, wie das zum Beispiel bei Formularen der Fall sein kann. All diese Arrays haben den Zweck die oben aufgezeigte Sicherheitslücke zu stopfen, indem sie externe Variablen nicht mehr einfach sichtbar machen, sondern in ein Array "verpacken". Sie heissen Superglobals, da sie immer verfügbar sind, Egal aus welchem Kontext auf sie zugegriffen wird. Das erste Beispiel also wäre nun sicher, da die per GET übergebene Variable nun $_GET['autorisiert'] heissen würde, und daher nicht mehr die eigentliche Variable überschreiben würde. Das zweite Beispiel müsste angepasst werden: PHP-Code: Session-Daten eingelesen wurde, überprüft wird. Ich hoffe das hat gereicht um einen Einblick in das Wie und Wieso hinter register_globals und die damit verbundene Problematik zu gewähren. An dieser Stelle noch einige Links die sich mit der selben Thematik beschäftigen: http://www.php.net/manual/de/security.globals.php http://www.php-faq.de/q/q-fehler-variable.html Danke fürs Lesen fantast | ||
| |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| Themen-Optionen | |
|
|
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| was heißt on, was heißt off, was heisst on, was bedeutet off, was heist on, was heißt off auf deutsch, was heisst off, was heist off, was heißt on und off, was bedeutet register_globals, was heißt off und on, was heißt ons, off heißt, was heißt on off, was heißt on?, was bedeutet on und off, was heißt o.n., was heisst register_globals, was heisst off auf deutsch, was bedeutet on oder off |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.