Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
de:entwickler:uebergabevariablen_pruefen [2009/02/17 19:00] fassede:entwickler:uebergabevariablen_pruefen [2012/05/12 01:09] (current) – [Funktion admFuncVariableIsValid] thomas-rcv
Line 1: Line 1:
 ====== Übergabevariablen prüfen ====== ====== Übergabevariablen prüfen ======
  
-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.+Ü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.
  
-//(Als Referenzbeispiel dient im Moment adm_program/administration/members/members.php)//+Admidio lässt generell über alle übergebenen **$_GET** und **$_POST** Varialben die Funktionen [[http://de2.php.net/manual/de/function.strip-tags.php|strip_tags]] und [[http://de2.php.net/manual/de/function.addslashes.php|addslashes]] laufen. Damit ist es zum einen nicht möglich HTML-Code in eine Variable einzubauen, sowie SQL-Injection einfach durchzuführen.
  
-**Lokale initialisierte Variablen anstelle der $_GET und $_POST Arrays verwenden:** +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.
-Es sollte für jede Übergabevariable eine lokale Variable erstellt werden, die zuvor auf einen gültigen Wert initialisert wirdDanach 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 gibtIch muss später nicht mehr mit isset() prüfenob $_GET['blabla'] überhaupt existiertAußerdem weiß ich bei der lokalen Variable, dass sich hier jemand bei der Zuweisung Gedanken gemacht hat und sie schon mal sicherer istals der direkte Zugriff auf $_GET['blabla'].+===== Funktion admFuncVariableIsValid ===== 
 +''Datei:'' **adm_program/system/function.php**\\  
 +''Version:'' **2.3** 
 +=== Beschreibung === 
 +Die Funktion prüft aus einem Array eine Variable auf plausible WerteDie Prüfung kann über weitere Parameter verfeinert werden. 
 +<code php>value admFuncVariableIsValid($array$variableName, $type, $defaultValue = null, 
 +                             $requireValue = false, $validValues = null, $directOutput = false)</code> 
 +=== 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'' und ''file''Je nach Typ werden unterschiedliche Prüfungen auf den Wert der Variable gemacht und ggf. ein Hinweis ausgegebenwenn 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.
  
-Die lokalen Variablen sollten am Besten immer mit **$req_** (Request) beginnenso weiß jederder mal kurz in ein Script schautdass der Inhalt der Variablen potentiell gefährlich ist.+=== Beispiele === 
 +<code php>// Zahl, welche ggf. mit 0 initialisiert wird 
 +$get_dat_id = admFuncVariableIsValid($_GET'dat_id''numeric'0);
  
-Beispiel: <code php>$req_start 0; +// Text, der ggf. mit DAT_DATES initialisiert wird 
-... +$get_headline admFuncVariableIsValid($_GET'headline', 'string', $gL10n->get('DAT_DATES'));
-if(isset($_GET['start'])) +
-+
-    if(is_numeric($_GET["start"]) == false) +
-    { +
-        $g_message->show("invalid"); +
-    } +
-    $req_start = $_GET['start']; +
-}</code>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:** +// Textder ggfmit 'actual' initialisiert wird und nur die Werte 'actual' und 'old' enthalten darf 
-Numerische Felder sollten immer mit der Funktion //is_numeric()// geprüft werden. Außerdem wäre es auch gutwenn man den Geltungsbreich einschränkt<code php>$req_mode = 0; +$get_mode admFuncVariableIsValid($_GET, 'mode''string', 'actual', false, array('actual', 'old'));</code>
-... +
-if(isset($_GET["mode"])) +
-+
-    if(is_numeric($_GET["mode"]) == false +
-    || $_GET["mode"] < 1 || $_GET["mode"] > 5) +
-    { +
-        $g_message->show("invalid"); +
-    } +
-    $req_mode = $_GET["mode"] +
-}</code> +
- +
-**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.<code php>$req_headline = null; +
-.. +
-if(isset($_POST['headline'])) +
-+
-    $req_headline = strStripTags($_POST['headline']); +
-}</code>+
  • de/entwickler/uebergabevariablen_pruefen.1234893659.txt.gz
  • Last modified: 2009/02/17 19:00
  • by fasse