phpbar.de logo

Mailinglisten-Archive

[php] undefinierte Variablen

[php] undefinierte Variablen

Hans Egg hans.egg at swissonline.ch
Do Sep 8 15:09:43 CEST 2011


Hallo Holger

Am 08.09.2011 um 13:33 schrieb Holger Winter:

> Wodurch wird mein Skript angreifbar wenn ich nicht zuvor prüfe ob
> die abzufragende Variable einen Wert enthält?

isset() prüft, ob sie überhaupt existiert, sie kann auch leer oder null sein.

> z.B.
> if($_REQUEST['speichern'] == 'ja')

Weil dein Skript unbekümmert weiter "läuft", auch wenn benötigte Informationen fehlen oder deren Herkunft nicht geprüft wird.

Beispiel: Du sendest mit einem Formular POST Daten, darunter auch den Wert 'ja' im Schlüssel 'speichern'. Was der Benutzer im Formular eingeben kann, hast du im Griff, weil du zB mit Javascript validierst und kritische Werte per SELECT vorgibst. Alle Formularfelder bzw. deren Schlüssel kann man im HTML Markup einsehen inkl. der ID im HIDDEN Field.

Wenn du mit $_REQUEST['speichern'] abfragst, weisst du gar nicht, ob POST Daten geliefert werden. Der Angreifer kann deine Formular-Action-Seite mit formularverarbeitung.php?speichern=ja&id=999 und beliebigen weiteren Parametern aufrufen.

Dein Script wird dann bei ($_REQUEST['speichern'] == 'ja') munter in den IF Zweig einsteigen. Wenn die Überprüfung der POST-Nutzdaten auch mit $_REQUEST erfolgt, können beliebige unerwartete Daten mit der URL per GET übermittelt werden, bösen SQL Code inklusive (Stichwort SQL-Injection). 

Wenn dein Skript auf jegliche isset($_POST[]) oder REQUEST_METHOD Prüfung verzichtet, wird es mit NULL-Werten oder leeren Variablen weiterfahren und der Angreifer kann dir jeden beliebigen Datensatz mit beliebigen Werten überschreiben.

Man kann die Liste der Gefahren weiter fortsetzen, allerdings haben sich schon einige Leute die Mühe genommen, darüber lesenswerte Bücher zu schreiben, zB "PHP-Sicherheit" 
http://dpunkt.de/buecher/3678.html 

oder "Softwarequalität in PHP-Projekten".
www.hanser.de/buch.asp?isbn=978-3-446-41923-0&area=Computer

Gruß, Hans

php::bar PHP Wiki   -   Listenarchive