Hvert enkelt element på et websted kan ændres af en ondsindet bruger (skjulte felter, div'er, stilarter, ajax-kald, you name it...).
Når det er sagt, hvis du allerede bruger Prepared Statements, skal du ikke bekymre dig for meget om SQL Injection, fordi mysql allerede ved, hvilke sætninger der skal udføres.
I stedet bør du rense alt det output, der gengives på et websted.
Lad os sige, at du i din form spørger, hvilket land jeg bor i på denne måde:
<select name="country">
<option value="Mexico">Mexico</option>
<option value="USA">USA</option>
<option value="Canada">Canada</option>
</select>
men jeg er en ondsindet bruger, og jeg bruger Chromes kodeinspektør til at ændre din HTML, og jeg vælger Mexico, men ændrer dens værdi til
og hvis du udskriver den værdi på en anden side på denne måde:
Your country is: <?=$country?>
Så skriver du:
Your country is:
<script type="text/javascript">alert("Hello World")</script>
og en advarselsboks vil poppe op med teksten "Hello World"
Hvilken skade kan jeg gøre med det, kan du undre dig over...
godt, jeg kan gøre hvad jeg vil med det, jeg kan stjæle cookies, eller hvis værdien er offentlig (f.eks. at du viser den værdi på din forside), så kunne jeg omdirigere dine brugere til en anden hjemmeside, ændre indholdet på din hjemmeside. ... hvad jeg vil.
For at rense dine brugeres output kan du bruge
htmlentities
Det vil for eksempel konvertere <
> symboler til dens respektive kode:
<
og >