Übergabevariablen prüfen
Übergaben an PHP-Scripte können von Angreifern sehr einfach manipuliert werden. Dazu muss nur die URL mit der Variable im Browser entsprechend manipuliert werden. Aus diesem Grund ist es sehr wichtig, dass alle Übergabevariablen vor der Benutzung im Script auf sinnvolle Werte geprüft werden.
Admidio lässt generell über alle übergebenen $_GET und $_POST Varialben die Funktionen strip_tags und addslashes laufen. Damit ist es zum einen nicht möglich HTML-Code in eine Variable einzubauen, sowie SQL-Injection einfach durchzuführen.
Zur Prüfung der Übergabevariablen steht die Funktion admFuncVariableIsValid zur Verfügung. Die Werte der Übergabevariablen sollten dann auch in eine neuen lokale Variable mit dem Präfix get_ zugewiesen werden. Besitzt die Übergabevariable den Namen $_GET['headline'], so sollte die lokale Variable $get_headline heißen. So sieht man im Code direkt, dass der Wert aus einer Übergabevariable kommt und behandelt den Inhalt ggf. vorsichtiger.
Funktion admFuncVariableIsValid
Datei:
adm_program/system/function.php
Version:
2.3
Beschreibung
Die Funktion prüft aus einem Array eine Variable auf plausible Werte. Die Prüfung kann über weitere Parameter verfeinert werden.
value admFuncVariableIsValid($array, $variableName, $type, $defaultValue = null, $requireValue = false, $validValues = null, $directOutput = false)
Parameter
- array das Array (z.B. $_GET oder $_POST), welches die zu prüfende Variable enthält
- variableName Name der Variable aus dem array welche geprüft werden soll
- type Typ der Variable
numeric
,string
,boolean
undfile
. Je nach Typ werden unterschiedliche Prüfungen auf den Wert der Variable gemacht und ggf. ein Hinweis ausgegeben, wenn die Variable nicht dem Typ entspricht - defaultValue Wurde kein Wert für die Variable dem Script übergeben, wird die Variable mit diesem Wert initialisiert
- requireValue Ist dies auf true gesetzt, so wird ein Hinweis ausgegeben, wenn der Variablen kein Wert übergeben wurde
- validValues ein Array mit gültigen Werten für die Variable. Ist der übergebene Wert nicht in diesem Array enthalten wird ein Hinweis ausgegeben
- directOutput Ist dieser Wert auf true gesetzt, so wird eine Fehlermeldung nicht als HTML-Seite zurückgegeben, sondern der Fehlertext direkt unformatiert per echo ausgegeben
Rückgabe
Zurückgegeben wird der Wert der Variable. Bei Texten wird hier noch zusätzlich die Funktion strip_tags durchgeführt, die HTML-Tags entfernt.
Beispiele
// Zahl, welche ggf. mit 0 initialisiert wird $get_dat_id = admFuncVariableIsValid($_GET, 'dat_id', 'numeric', 0); // Text, der ggf. mit DAT_DATES initialisiert wird $get_headline = admFuncVariableIsValid($_GET, 'headline', 'string', $gL10n->get('DAT_DATES')); // Text, der ggf. mit 'actual' initialisiert wird und nur die Werte 'actual' und 'old' enthalten darf $get_mode = admFuncVariableIsValid($_GET, 'mode', 'string', 'actual', false, array('actual', 'old'));