Anforderungen an ein sicheres Formular
Jens Simrock
- php
-2 Michi0 fastix®
Hallo zusammen!
Ich benutze seit langem für die Erstellung von Kontaktformularen
den phpformgenerator. Weil ich kein Programmierer bin,
ist dies eine sehr hilfreiche Krücke für mich, Mailformulare auf
PHP-Basis erstellen zu lassen und dabei Pflichtfelder festlegen zu
können, simple Plausibilitätsprüfungen zu haben etc.
Nur liest man ja immer wieder, dass gerade einfach gestrickte
Kontaktskripte zum Massenversand von Spam missbraucht werden.
Ich frage mich jetzt, was macht ein "sicheres" Skript aus und
wo finde ich Informationen darüber, wie man seine Skripte sicher
bekommt? Und wie groß ist die Gefahr überhaupt?
Wäre für Hinweise oder Links dankbar.
Jens
Hi Jens,
Ich frage mich jetzt, was macht ein "sicheres" Skript aus und
wo finde ich Informationen darüber, wie man seine Skripte sicher
bekommt? Und wie groß ist die Gefahr überhaupt?
Recht sicher wird das ganze z.B. schon mal, wenn der User noch den Text (paar Zeichen halt) aus einer so dynamisch wie möglich generierten Grafik korrekt eingeben muss, die ein böses Skript so ohne Weiteres halt nicht auslesen bzw. interpretieren kann.
Gruß Michi
Moin!
Hallo zusammen!
Also... was der phpformgenerator erzeugt wissen sicherlich ein paar Leute weniger als es Leute gibt, die über die "sichere" Verarbeitung von Formulardaten Bescheid wissen.
Die zu stellenden Fragen sind:
Erfolgt die Überprüfung serverseitig (z.B. durch PHP) oder browserseitig(Javascript). Letzteres ist nur für eine Benutzerhilfe gut, der Sicherheit dient es keineswegs, weil immer noch gesendet werden kann, was im Gusto des vermeintlichen Benutzeres oder eben des Angreifers liegt.
Wie erfolgt die Weiterverarbeitung?
Die üblichen Tricks sind nur Beispiele und geben lange nicht den gesamten Komplex wieder, zeigen aber unten deutlich um was es geht. Die Funktionen kannst und solltest Du bei http://de.php.net/de/ nachlesen, aber zur Vorsicht immer die englische Ausgabe http://de.php.net/en/ vergleichen, oft ist die deutsche Übersetzung schlecht oder unvollständig.
Formulardaten, die nur ganze Zahlen enthalten dürfen:
<input id="intZahl" name="intZahl" type="text" />
<input id="decZahl" name="decZahl" type="text" />
<input id="strString" name="strString" type="text" />
PHP-Skript:
$strError='';
if (isset($_GET['intZahl'])) {
$intZahl=(int)$_GET['intZahl'];
} else {
$strError.='Ganze Zahl nicht angegeben. ';
}
if (isset($_GET['decZahl'])) {
$intZahl=$_GET['decZahl']*1;
} else {
$strError.='Dezimalzahlzahl nicht angegeben. ';
}
3. Strings...
sind ein wenig zu kompliziert für eine Schnelldarstellung
http://www.php-resource.de/manual.php?p=ref.regex liefert Dir gute Anfangshinweise, die Funktionen kannst Du besser bei http://de.php.net/manual/de/ref.regex.php nachlesen.
Jedoch solltest Du grob so vorgegehen:
if (isset($_GET['strString'])) {
if (ini_get('magic_quotes_gpc')) {
$strString=stripslashes($_GET['strString']);
} else {
$strString=stripslashes($_GET['strString']);
}
#hier Feinprüfung mit regex,trimmen und so weiter
} else {
$strError.='Dezimalzahlzahl nicht angegeben. ';
}
if ($strError != '') {
# Formular mit Fehler neu senden
exit; #
}
Beim Eintrag in Datenbanken:
$sql='SELECT spalte FROM table WHERE dies="'.mysql_real_escape_string($strString).'"';
#Beim Versenden von Mails:
$to = str_replace("\n",'',$to);
$from = str_replace("\n",'',$from);
$subject = str_replace("\n",'',$subject);
$strString=strip_tags($strString);
Beim Schreiben in aufrufbare oder (zu) includierende Dateien:
$strString = str_replace("<?",'',$strString);
$strString = str_replace("?>",'',$strString);
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo, fastix!
Erst einmal vielen Dank für deine ausführlichen Bemühungen!
Also... was der phpformgenerator erzeugt wissen sicherlich ein paar Leute weniger als es Leute gibt, die über die "sichere" Verarbeitung von Formulardaten Bescheid wissen.
Das war auch mehr so ein Schuss ins Blaue, ob da evtl. schon jemand
von konkreten Problemen weiß.
Erfolgt die Überprüfung serverseitig (z.B. durch PHP) oder browserseitig(Javascript).
Serverseitig.
Allerdings ist mir schon nicht klar, wie/ob eine Plausibilitätsprüfung
einen Sicherheitsgewinn darstellt.
Ich hätte die Probleme an anderen Stellen vermutet. :-/
Jens
Moin!
Das war auch mehr so ein Schuss ins Blaue, ob da evtl. schon jemand
von konkreten Problemen weiß.
Ja. Über welches der ca. 79236429349236 verschiedenen konkret möglichen Probleme möchtest Du etwas wissen? Die Frage ist nämlich: wie werden die Daten konkret weiterverarbeitet? Genau dann treten die Probleme nämlich erst auf. Un djede mögliche Weiterverarbeitung hat andere Anforderungen.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
Allerdings ist mir schon nicht klar, wie/ob eine Plausibilitätsprüfung
einen Sicherheitsgewinn darstellt.
Ja, Doch. Wenn ganz andere Daten kommen, als Du erwartest, dann kannst Du davon ausgehen:
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®