Dennis: mysql_real_escape_string + htmlspecialchars

Beitrag lesen

Hi blaschi,

$text = htmlspecialchars($_GET['text']);

Wie ich bereits schrieb, möchtest du genau das nicht machen. Stell dir mal vor, du möchtest irgendwann mal die Daten aus der Datenbank per E-Mail verschicken. Jetzt hast du in der Datenbank die Daten aber so abgespeichert, dass diese bereits für die Ausgabe in einem HTML-Kontext korrekt maskiert sind. Das heißt aber gleichzeitig auch, dass die Daten für den Versand in einer Textmail *falsch* maskiert sind. In einer Textmail besteht kein Bedarf z.B. < als &lt; zu maskieren!

Um die Daten jetzt trotzdem per Mail verschicken zu können, müsstest du sie erst wieder umwandeln - wenn die Daten allerdings von einem anderen Programmierer in die Datenbank gespeichert wurden, weißt du vielleicht gar nicht, wie die Daten kodiert wurden, folglich weißt du auch nicht, wie du diese korrekt dekodieren kannst.

Aus diesem Grund solltest du dir folgendes angewöhnen: Speichere grundsätzlich Rohdaten in der Datenbank. In diesem konkreten Fall: Verwende *nicht* htmlspecialchars() vor dem Abspeichern der Daten.

Bei der Ausgabe der Daten kodierst du diese dann natürlich korrekt, für HTML also beispielsweise:
echo '<p>' . htmlspecialchars($data['inhalt']) . '</p>';

$sql = sprintf("INSERT INTO artikel (titel, inhalt, autor, datum, kategorie, aufrufe, tags) VALUES ('%s', '%s', '%s', '%s', '%s', 1, '%s')" ,   mysql_real_escape_string(checkPost($titel), $db),
       mysql_real_escape_string(htmlspecialchars(checkPost($dummy)), $db),
       mysql_real_escape_string(checkPost($autor), $db),
       mysql_real_escape_string(checkPost($datum), $db),
       mysql_real_escape_string(checkPost($kategorie), $db),
       mysql_real_escape_string(checkPost($tags), $db));
[/code]

Was macht die mysteriöse Funktion checkPost()?

Viele Grüße,
  ~ Dennis.