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

I campi selezionati a discesa sono vulnerabili a qualsiasi tipo di iniezione

Ogni singolo elemento di un sito Web può essere modificato da un utente malintenzionato (campi nascosti, div, stili, chiamate ajax, lo chiami...).

Detto questo, se stai già utilizzando le istruzioni preparate, non dovresti preoccuparti troppo di SQL Injection perché mysql sa già quali istruzioni verranno eseguite.

Invece dovresti disinfettare tutto l'output che viene visualizzato in un sito Web.

Diciamo che nella tua forma mi stai chiedendo in quale paese vivo in questo modo:

 <select name="country">
     <option value="Mexico">Mexico</option>
     <option value="USA">USA</option>
     <option value="Canada">Canada</option>
 </select>

ma sono un utente malintenzionato e utilizzo il controllo codice di Chrome per modificare il tuo codice HTML e seleziono Messico, ma ne cambio il valore in

<script type="text/javascript">alert("Hello World");</script>

e se emetti quel valore in un'altra pagina in questo modo:

 Your country is: <?=$country?>

Allora scriverai:

 Your country is:
 <script type="text/javascript">alert("Hello World")</script>

e verrà visualizzata una finestra di avviso con il testo "Hello World"

Che male posso fare con questo ti chiederai...

beh, posso fare tutto ciò che voglio con quello, posso rubare i cookie o se quel valore è pubblico (diciamo che stai visualizzando quel valore nella tua prima pagina), allora potrei reindirizzare i tuoi utenti a un altro sito web, cambiare il contenuto del tuo sito web.. .quello che voglio.

Per sanificare l'output dei tuoi utenti puoi utilizzare

htmlentities

Ciò convertirà, ad esempio, il &lt; > simboli al rispettivo codice:&lt; e &gt