Download 3. Auflage
Transcript
3.4 Variablen richtig prüfen
Um dieses Problem zu verhindern, ist es unerlässlich, die Mailadresse des Formularabsenders grob auf syntaktische Korrektheit zu
prüfen. Idealerweise erledigen Sie das mit einem regulären Ausdruck:
preg_match("#^[$x]+(\.?([$x]+\.)*[$x]+)?(([a-z0-9]+-*)?[a-z09]+\.)+[a-z]{2,6}.?#", $_POST['absender'])
Beachten Sie bitte, dass das Format für E-Mail-Adressen sehr komplex
ist und sehr viele Formatierungsmöglichkeiten zulässt. Dieser reguläre
Ausdruck ist daher nur eine sehr grobe Näherung.
Alternativ zu einer Überprüfung auf syntaktisch korrekte Mailadressen können Sie auch prüfen, ob die Mailadresse Newlines enthält
– tut sie das, können Sie davon ausgehen, dass gerade ein Angriff per
Header-Injection versucht wird.
$absender = urldecode($_POST["absender"];);
if (eregi("\r",$absender) || eregi("\n",$absender)){
die("Header-Injection vermutet, breche ab");
}
Wie üblich für PHP führen immer mehrere Wege zum Ziel: Sie können,
falls Sie die Suhosin-Extension für PHP installiert haben, mit der
Direktive suhosin.mail.protect das Einfügen von doppelten Zeilenumbrüchen, auf dem dieser Angriff basiert, vollständig unterbinden.
Zusätzlich können Sie die Sicherheitsextension anweisen, Header vom
Typ CC, BCC, To und Subject im vierten Parameter zu mail() zu verbieten. Dieser Schutz ist deutlich wirksamer als die beiden in PHP implementierten Möglichkeiten in diesem Abschnitt; wenn Sie die Möglichkeit haben, sollten Sie stets Suhosin nutzen. Im Abschnitt 11.1
erfahren Sie mehr über diese Funktion.
3.4
Variablen richtig prüfen
Nachdem Sie die Vorbereitungen für die Parametermanipulation kennengelernt, die dafür notwendigen Werkzeuge installiert haben und
wissen, welche Bereiche Ihrer Applikation sicherheitskritische Bereiche
haben können, zeigen wir Ihnen auf den folgenden Seiten, wie Sie Variablen korrekt validieren. Die korrekte und sorgfältige Überprüfung
muss in jeder Applikation implementiert werden, um gegen Parametermanipulation geschützt zu sein. Die Prüfung einer Variablen sollte
nach folgenden Regeln ablaufen:
■ Prüfung auf den richtigen Datentyp
■ Prüfung auf die Länge
■ Prüfung auf den Inhalt und ggf. Maskieren von Sonderzeichen oder
HTML-Code
67