EKKi: htmlentities und mysql_real_escape_string

Beitrag lesen

Mahlzeit,

» Theoretisch kann ich mit einem eigenen Formular, dessen Ziel Dein Skript ist,
» beliebige Daten an Dein Skript senden - und da kann natürlich in Parametern, die » in Deinem Formular Radio- oder Checkboxen waren, auch etwas anderes drinstehen.

das wusste ich absolut nicht.

Dein Formular und das Skript, was die Daten verarbeitet, müssen ja in keinster Weise miteinander verbunden sein. Beispiel (aufs Wesentliche gekürzt):

Angenommen, Dein Formular sähe so aus:

foo.html:
----------

  
<form action="bar.php">  
<input type="radio" name="fernsehen" value="ja" />  
<input type="radio" name="fernsehen" value="nein" />  
<input type="radio" name="fernsehen" value="vielleicht" />  
</form>  

Weiter angenommen, Dein Skript wäre unsicher und unsauber programmiert:

bar.php:
----------

  
[...]  
mysql_query("INSERT INTO medienkonsum SET fernsehen = '".$_GET["fernsehen"]."'");  
[...]  

Wenn ich weiß, wo ich Dein Skript "bar.php" finden kann - was sollte mich also davon abhalten, einfach mal folgendes Formular zu basteln und zu schauen, was passiert, wenn ich dort beliebige Daten (z.B. den String "test'; DELETE FROM medienkonsum; SELECT * FROM medienkonsum WHERE '' = '") eingebe?

"Bösewicht":

evil.html:
----------

  
<form action="http://www.example.org/bar.php">  
<input type="text" name="fernsehen" />  
</form>  

Nun eine Antwort auf meine zweite Frage war ja und eine nein:)
Ich denke ich habe verstanden wo der unterschied ist.
Wenn ich mich für das Ja (Ekki) entscheide, dann habe ich keine "Mehrarbeit" beim auslesen kann aber eventuell Probleme beim Durchsuchen der DB bekommen ?

Ich meinte, dass Du htmlentities() erst anwenden solltest, wenn Du konkret eine Ausgabe in/als HTML machst ... diese Funktion VOR dem Schreiben in eine Datenbank auf einen String anzuwenden, ist - wie Sven ja bereits schrieb - zutiefst widersinnig und schadet eigentlich nur.

Wenn ich mich für das Nein (Sven) entscheide steht der Text so wie er ist in der Tabelle und ich müsste diesen dann ungefähr so ausgeben :
echo htmlspecialchars($_row['feld']); ?

Genau. Das, was Du aus der Datenbank herausholst, musst Du vor der Ausgabe in ein HTML-Dokument entsprechend behandeln.

Ich denke ich werde mir diesen Schritt angewöhnen
"INSERT INTO tabelle SET wert1 = '".mysql_real_escape_string($_POST['var1'])."'";
und alles andere vergessen.

Guter Plan! :-)

MfG,
EKKi

--
sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|