Ci sono due cose molto importanti che devi fare per evitare seri problemi di sicurezza.
-
È necessario eseguire l'escape dell'input dell'utente prima di inserirlo nella query SQL. Escludere significa eseguire l'escape di tutti i caratteri speciali come
'; fortunatamente, esiste una funzione che già lo fa automaticamente:mysql_real_escape_string .Se non sfuggi all'input dell'utente potrebbero succedere cose brutte. Immagina che la tua query sia
INSERT INTO userdata VALUES ('$user_data'). Ora immagina che l'utente abbia scritto'; DROP DATABASE userdata;.Se non esci, la tua query diventerà:
INSERT INTO userdata VALUES (''; DROP DATABASE userdata;'). Come puoi immaginare, questo non va bene:se hai abilitato le multi dichiarazioni puoi dire addio al tuo database. Questo è chiamato Iniezione SQL attacco. -
Quando stai inviando la tua variabile all'utente, devi anche sostituire correttamente i caratteri speciali HTML con entità HTML. Fortunatamente, esiste anche una funzione per farlo:htmlspecialchars() . Trasformerà i caratteri HTML speciali come
<a<.Questo sembra essere un problema spesso sottovalutato, ma in realtà è molto serio. Immagina se
$user_datacontiene<script>SomeNastyScript()</script>. Potrebbe sfruttare vulnerabilità esistenti nel browser dei tuoi utenti, o potrebbe inviare un cookie non HTTPOnly (che potrebbe contenere password salvate) all'attaccante, oppure potrebbe indurre l'utente a scrivere la propria password su un modulo generato attraverso la manipolazione di il DOM (possibile in javascript), o molte altre cose brutte.Questo si chiama XSS (Scripting tra siti).
Versione breve
-
Chiama
mysql_real_escape_stringsulla stringa prima di inserirla nella tua query SQL (ma non quando eseguiechoesso). -
Chiama
htmlspecialcharssulla stringa prima di mostrarla all'utente (ma non quando la metti nel database).