Sven Rautenberg: Sicherheitslücken - Konkret!

Beitrag lesen

Moin!

Beispiel für Formular:

if(!isset($_POST['name'], $_POST['email'], $_POST['hp'], $_POST['inhalt']))
{
   die("Bitte Benutzen sie das Formular aus dem Gästebuch\n");
}

Kann man machen, muß man aber nicht. Hängt davon ab, wie das Skript reagiert, wenn gewisse Felder nicht vorhanden sind. Die Schlussfolgerung "Wenn alle genannten Felder vorhanden sind, dann kommt der Request vom Gästebuchformular" ist jedenfalls nicht zutreffend.

oder beim inserten in die DB:

mysql_query("INSERT INTO gast (name,email,open,hp,inhalt,datum) VALUES ('".addslashes(htmlspecialchars($_POST['name']))."','".addslashes(htmlspecialchars($_POST['email']))."','".addslashes(htmlspecialchars($_POST['open']))."','".addslashes(htmlspecialchars($_POST['hp']))."','".addslashes(htmlspecialchars($_POST['content']))."','$datum')") OR die(mysql_error());

Warum benutzt du hier addslashes? Und htmlspecialchars?

addslashes solltest du nicht benutzen, sondern mysql_escape_string(). Außerdem solltest du in diesem Fall sicherstellen, dass Magic_quotes_gpc ausgeschaltet ist, ansonsten wäre es sehr ratsam, die dadurch hinzugefügten Slashes vorher mit stripslashes zu entfernen!

htmlspecialchars sollte man ebenfalls nicht benutzen, wenn man die Texte in die Datenbank speichert. Natürlich sollte man sie _irgendwann_ benutzen - aber eben nicht beim Speichern in die DB. Ich vertrete die These, dass die Daten möglichst lange unbehandelt und uncodiert bleiben sollten, so dass man am Ende noch jederzeit eine Codierung für die gewünschte Ausgabe machen kann, ohne andere Codierungen wieder rückgängig machen zu müssen. Typisches Beispiel dafür ist z.B.: Wann soll man Zeilenumbrüche in <br> wandeln? Natürlich erst bei einer Ausgabe, die dies erfordert. Üblicherweise wird es nämlich irgendwo immer auch die Möglichkeit geben, das Gespeicherte wieder bearbeiten zu lassen. Textareas mögen keine <br>s, sondern nur normale Zeilenumbrüche...

- Sven Rautenberg

--
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|