This is an old revision of the document!


Übergabevariablen prüefen

Da Übergaben an Scripte von Angreifern manipuliert werden können, ist es sehr wichtig, dass alle Übergabevariablen vor der Benutzung auf sinnvolle Werte geprüft werden. Hier sollen nun ein paar nötige Prüfungen für diese Variablen aufgelistet werden.

(Als Referenzbeispiel dient im Moment adm_program/administration/members/members.php)

Lokale initialisierte Variablen anstelle der $_GET und $_POST Arrays verwenden: Es sollte für jede Übergabevariable eine lokale Variable erstellt werden, die zuvor auf einen gültigen Wert initialisert wird. Danach wird die entsprechende $_GET oder $_POST Variable GEFILTERT der lokalen Variable zugewiesen.

Dies hat den Vorteil, dass es immer einen definierten Zustand der lokalen Variable gibt. Ich muss später nicht mehr mit isset() prüfen, ob $_GET['blabla'] überhaupt existiert. Außerdem weiß ich bei der lokalen Variable, dass sich hier jemand bei der Zuweisung Gedanken gemacht hat und sie schon mal sicherer ist, als der direkte Zugriff auf $_GET['blabla'].

Die lokalen Variablen sollten am Besten immer mit $req_ (Request) beginnen, so weiß jeder, der mal kurz in ein Script schaut, dass der Inhalt der Variablen potentiell gefährlich ist.

Beispiel:

$req_start = 0;
...
if(isset($_GET['start']))
{
    if(is_numeric($_GET["start"]) == false)
    {
        $g_message->show("invalid");
    }
    $req_start = $_GET['start'];
}

Hier weiß man nun, dass die Variable im Default-Fall den Wert 0 besitzt und nur in einem gültigen Fall mit $_GET['start'] geschrieben wird.

Numerische Felder generell: Numerische Felder sollten immer mit der Funktion is_numeric() geprüft werden. Außerdem wäre es auch gut, wenn man den Geltungsbreich einschränkt.

$req_mode = 0;
...
if(isset($_GET["mode"]))
{
    if(is_numeric($_GET["mode"]) == false
    || $_GET["mode"] < 1 || $_GET["mode"] > 5)
    {
        $g_message->show("invalid");
    }
    $req_mode = $_GET["mode"]
}

Alphanumerische Felder: Alphanumerische Felder sollten durch die internen Funktion strStripTags() laufen. Diese entfernt HTML und PHP-Code. Bei einigen Feldern würde vielleicht auch eine Prüfung mit strlen() Sinn machen.

$req_headline = null;
..
if(isset($_POST['headline']))
{
    $req_headline = strStripTags($_POST['headline']);
}
  • de/entwickler/uebergabevariablen_pruefen.1227129058.txt.gz
  • Last modified: 2008/11/19 22:10
  • by fasse