Mysql
 sql >> Database >  >> RDS >> Mysql

Input dell'utente, pulire e disinfettare prima di inviare a db

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.