Varje enskilt element på en webbplats kan ändras av en illvillig användare (dolda fält, divs, stilar, ajax-samtal, you name it...).
Som sagt, om du redan använder Prepared Statements bör du inte oroa dig för mycket om SQL Injection eftersom mysql redan vet vilka satser som kommer att köras.
Istället bör du rensa alla utdata som renderas på en webbplats.
Låt oss säga att du i din form frågar vilket land jag bor i på detta sätt:
<select name="country">
<option value="Mexico">Mexico</option>
<option value="USA">USA</option>
<option value="Canada">Canada</option>
</select>
men jag är en illvillig användare, och jag använder Chromes kodinspektör för att ändra din HTML, och jag väljer Mexiko, men ändrar dess värde till
och om du matar ut det värdet på en annan sida på detta sätt:
Your country is: <?=$country?>
Då kommer du att skriva:
Your country is:
<script type="text/javascript">alert("Hello World")</script>
och en varningsruta dyker upp med texten "Hello World"
Vilken skada kan jag göra med det kanske du undrar...
Jag kan göra vad jag vill med det, jag kan stjäla cookies eller om det värdet är offentligt (säg att du visar det värdet på din förstasida), så kan jag omdirigera dina användare till en annan webbplats, ändra innehållet på din webbplats. ... vad jag vill.
För att rensa dina användares utdata kan du använda
html-entiteter
Det konverterar till exempel <
> symboler till dess respektive kod:
<
och >