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_data
contiene<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_string
sulla stringa prima di inserirla nella tua query SQL (ma non quando eseguiecho
esso). -
Chiama
htmlspecialchars
sulla stringa prima di mostrarla all'utente (ma non quando la metti nel database).