Ausgaben und Escapen?

xkevin96x

Grünschnabel
Muss ich Ausgaben aus einer Datenbank heraus auch escapen, wenn ich sie bei
der Eingabe bereits escaped habe?
Beispiel:
User a gibt "<b>HI! ICH MACHE ALLLLEEEEES FETT!" als Kommentar ein.
Als Ausgabe kommt der selbe Text auch unformatiert - Zweck erfüllt.
Denoch weiß ich nicht so recht, ob ich das auch Escapen muss.
Soll bzw muss ich? Oder reicht bei der Ausgabe einfach mysql_real_escape_string?
 
Wenn Du die Eingaben nicht validiert hast und es sich bei den Eingaben um Nutzereingaben handelt, solltest Du sie auch bei der Ausgabe (besonders Text, BLOB) maskieren. Denn das Maskieren beim Einfügen in die Datenbank verhindert SQL-Injektionen, welche durch eingeschleusten HTML-Code nicht entstehen, aber wenn Du diese Daten dann ausgibt, bietest Du ohne Maskieren eine Lücke für beispielsweise XSS-Attacken, weil jemand JavaScript auf Deiner Seite ausführen kann.
 
Reicht dort, wenn ich das oben genannte nutze? Ich schätze mal nicht, nur mein Problem ist, wenn ich
htmlentities nutze werden die BB-Codes in nerviges Gebrabbel umgewandelt.
Gibts dort eine andere Lösung, sodass zB User kein Fett schreiben, aber wenn ich in die Datenbank manuell
etwas als Fett eintrage dies bleibt? Danke für Antworten :)
 
Eigentlich musst Du nur die Größerals- und Kleinerals-Zeichen umwandeln, damit mögliche HTML-Tags nicht mehr als solche erkannt werden.
 
Das würde bei <b> beispielsweise aber auch nicht mehr funktionieren.
Ich habe die Eingaben mit htmlentities und mysql_real_escape_string gefiltert, die Ausgabe
jedoch nur mit mysql_real_escape_string gemacht, ist das auch in Ordnung?
Bei htmlentities funktionieren die BB-Codes ansonsten nicht mehr, ich möchte aber, dass sie ausgegeben werden können.
 
Das stimmt nicht ganz!
Die einfachste Variante ist die Funktion htmlentities.
PHP:
$escaped = htmlentities($original);
Aber genau da funktionieren die Codes nicht mehr.
Bei den Eingaben der Nutzer werden die BB-Codes wie "<b>" "<br />",... entschärft, wenn ich also
manuell einen BB-Code über die Datenbank eingebe, soll der daraus folgende Text den
Code sozusagen annehmen, der Text soll also beispielsweise fett sein.
 
Nur so als Hinweis: mysqli_real_escape_string() ist das einzige, was Du brauchst, wenn Du die Daten in die Datenbank speicherst. htmlentities() als Beispiel ist das einzige, was Du brauchst, wenn Du die Daten aus der Datenbank wieder ausgibst.
 
Zurück