Elk afzonderlijk element in een website kan worden gewijzigd door een kwaadwillende gebruiker (verborgen velden, divs, stijlen, ajax-aanroepen, noem maar op...).
Dat gezegd hebbende, als je al gebruikmaakt van voorbereide instructies, hoef je je niet al te veel zorgen te maken over SQL-injectie, omdat mysql al weet welke instructies zullen worden uitgevoerd.
In plaats daarvan moet u alle uitvoer die op een website wordt weergegeven, opschonen.
Laten we zeggen dat je in je formulier vraagt in welk land ik op deze manier woon:
<select name="country">
<option value="Mexico">Mexico</option>
<option value="USA">USA</option>
<option value="Canada">Canada</option>
</select>
maar ik ben een kwaadwillende gebruiker en ik gebruik de code-inspecteur van Chrome om uw HTML te wijzigen, en ik selecteer Mexico, maar wijzig de waarde in
<script type="text/javascript">alert("Hello World");</script>
en als u die waarde op een andere pagina op deze manier uitvoert:
Your country is: <?=$country?>
Dan schrijf je:
Your country is:
<script type="text/javascript">alert("Hello World")</script>
en er verschijnt een waarschuwingsvenster met de tekst "Hello World"
Wat voor kwaad kan ik daarmee aanrichten, vraag je je misschien af...
Nou, ik kan daarmee doen wat ik wil, ik kan cookies stelen of als die waarde openbaar is (stel dat je die waarde op je voorpagina weergeeft), dan kan ik je gebruikers omleiden naar een andere website, de inhoud van je website wijzigen.. . wat ik wil.
Om de output van uw gebruikers te zuiveren, kunt u
htmlentities
Dat converteert bijvoorbeeld de <
>
symbolen naar de respectievelijke code:<
en >