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

Variabile utente sicura PHP

Ci sono due cose molto importanti che devi fare per evitare seri problemi di sicurezza.

  1. È 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.

  2. 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

  1. Chiama mysql_real_escape_string sulla stringa prima di inserirla nella tua query SQL (ma non quando esegui echo esso).

  2. Chiama htmlspecialchars sulla stringa prima di mostrarla all'utente (ma non quando la metti nel database).