PHP: Prüfung von Formular-Variablen
Variablen, die in einem Script übergeben werden (z.B. als POST- oder GET-Variable), sollten aus Gründen der Sicherheit (SQL-Injection etc.) auf Sinnhaftigkeit und Korrektheit überprüft werden. Dies können Sie realisieren, in dem Sie für einen konkreten Fall z.B. Wertebereiche abfragen oder nur numerische Werte zulassen, wo auch nur numerische Werte erwartet werden etc.
Eine andere (zusätzliche) Variante ist es, konkrete Zeichenketten, die dafür bekannt sind, dass sie im Zusammenhang mit SQL-Injection etc. stehen, gezielt auszuschließen.
Die folgende Codesequence ist ein Beispiel hierfür:
class clsVarHandler{
/**
* check of variables against special words
*
* @param mixed $strValue
* @return boolean true|false
*/
static private function checkBadWords($strValue) {
if ($strValue = '' || !is_string($strValue)) return true;
$arrBadWords = array('union','intersect','cmd',
'../','./','--','/*','*/','command','host','utl_','dbms_',
'object','applet','meta');
foreach ($arrBadWords as $key=>$value) {
if (strpos(strtolower($strValue),$value) !==false) return false;
}
return true;
}
/**
* process a variable as POST-Parameter
*
* @param string $strVar name of the variable
* @return mixed POST-value or false
*/
static public function getPostVar($strVar) {
$tmpValue = false;
foreach ($_POST as $key => $value) {
if (strtoupper($key) == strtoupper($strVar)) {
$tmpValue = $value;
break;
}
}
if (!self::checkBadWords($tmpValue)) return false;
return $tmpValue;
}
}
?>
Die Anwendung ist relativ einfach, wenn z.B. die Variable "Nachname" erwartet wird:
require_once('clsVarHandler.php');
$strNachname = clsVarHandler::getPostVar('Nachname');
?>
Die Methode liefert den POST-Inhalt der Variable "Nachname" zurück. Der Inhalt wird aber intern geprüft, ob er nicht „BadWords“ enthält. Ist dies der Fall oder ist die Variable nicht gesetzt, so liefert die Variable den Wert "false" zurück.
Nebeneffekt ist, dass die Variable $strNachname generell initialisiert ist. Entweder mit dem übergebenen Wert oder einfach nur mit "false".
Fazit
Dieses Beispiel soll nur einen Anstoß geben.
Sie können natürlich ähnliche Methoden für z.B. GET- oder Session-Variablen implementieren oder die Prüfungen erweitern, in dem man z.B. Wertebereiche überprüft oder auch die Groß-/Kleinschreibung in die Prüfung mit einbezieht. Ab PHP 5 sollten Sie die Filterfunktionen zur Validierung ebenfalls mit einbeziehen.