Sie befinden sich hier:
Homepage
»
Webseitengestaltung
»
Blog
»
Web-Sicherheit
24.10.2010

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:

<?PHP
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:

<?PHP
  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.

Autor: Mein Name ist Harry Kämpf und ich bin seit vielen Jahren als Projekt Manager im Webumfeld tätig. Auf diesen Erfahrungen basieren die Tipps zur Webseitengestaltung. Ich schreibe gern über Webthemen, nehme aktuelle Trends auf und berate bei Bedarf. Mehr Infos über mich können Sie auf meiner Homepage nachlesen.

3

Fragen / Anregungen?

Sicherheitsabfrage:
Datenschutzhinweis: Die eingegebenen Daten werden nicht an Dritte weitergegeben.