Innanzitutto, mantieni il testo logico e pulito:
trim() -- OK
htmlentities($comment, ENT_NOQUOTES) -- No; do later
mysqli_real_escape_string() -- Yes; required by API
nl2br() -- No; see below
La logica alla base di queste raccomandazioni:i dati nel database dovrebbero essere solo dati semplici. Non htmlentities, non br-tag. Ma devi fare escape_string per passare i dati da PHP a MySQL; gli escape non verranno memorizzati.
Ma... Questo è solo il passaggio intermedio. Da dove provengono i dati? Le versioni precedenti di PHP cercano di "proteggere" l'aggiunta di escape e altra spazzatura che funziona bene per HTML, ma rovinano MySQL. Disattiva questa fuga magica e ottieni i dati grezzi.
Dove vanno i dati? Probabilmente HTML? Dopo SELECTing
i dati tornano fuori dalla tabella, poi prima fai htmlentities()
e (facoltativamente) nl2br()
;
Nota, se prevedi di preservare cose come <I>
(per corsivo), stai chiedendo guai -- guai grossi. Tutto ciò che un hacker deve fare è <script> ...
per iniettare ogni sorta di cattiveria nella tua pagina web e possibilmente nel tuo intero sistema.