Houd de tekst eerst logisch en overzichtelijk:
trim() -- OK
htmlentities($comment, ENT_NOQUOTES) -- No; do later
mysqli_real_escape_string() -- Yes; required by API
nl2br() -- No; see below
De logica achter die aanbevelingen:de gegevens in de database moeten gewoon gegevens zijn. Geen htmlentities, geen br-tags. Maar u moet de escape_string doen om gegevens van PHP naar MySQL door te geven; de ontsnappingen worden niet opgeslagen.
Maar... Dat is slechts de tussenstap. Waar kwamen de gegevens vandaan? Oudere versies van PHP proberen u te "beschermen" door escapes en andere rommel toe te voegen die goed werken voor HTML, maar MySQL verknoeien. Schakel dergelijke magische ontsnappingen uit en verkrijg de onbewerkte gegevens.
Waar gaan de gegevens naar toe? Waarschijnlijk HTML? Na SELECTing
de gegevens weer uit de tabel, vervolgens doe eerst htmlentities()
en (optioneel) nl2br()
;
Let op, als u verwacht zaken als <I>
. te bewaren (cursief), je vraagt om problemen -- grote problemen. Het enige wat een hacker hoeft te doen is <script> ...
om allerlei narigheid in je webpagina en mogelijk je hele systeem te injecteren.