Každý jednotlivý prvek na webu může být pozměněn uživatelem se zlými úmysly (skrytá pole, divs, styly, volání ajax, co si jen vzpomenete...).
To znamená, že pokud již používáte připravené příkazy, neměli byste se příliš starat o SQL Injection, protože mysql již ví, jaké příkazy se budou provádět.
Místo toho byste měli dezinfikovat veškerý výstup, který je vykreslován na webu.
Řekněme, že ve vaší podobě se ptáte, v jaké zemi žiji tímto způsobem:
<select name="country">
<option value="Mexico">Mexico</option>
<option value="USA">USA</option>
<option value="Canada">Canada</option>
</select>
ale jsem uživatel se zlými úmysly a ke změně vašeho kódu HTML používám inspektor kódu Chrome a vyberu Mexiko, ale změním jeho hodnotu na
<script type="text/javascript">alert("Hello World");</script>
a pokud tuto hodnotu vypíšete na jinou stránku tímto způsobem:
Your country is: <?=$country?>
Pak napíšete:
Your country is:
<script type="text/javascript">alert("Hello World")</script>
a objeví se okno s upozorněním s textem „Ahoj světe“
Možná se divíte, co tím mohu ublížit...
mohu s tím dělat, co chci, mohu krást soubory cookie, nebo pokud je tato hodnota veřejná (řekněme, že tuto hodnotu zobrazujete na své titulní stránce), mohu vaše uživatele přesměrovat na jiný web, změnit obsah vašeho webu. .co chci.
K dezinfekci výstupů vašich uživatelů můžete použít
htmlentities
Tím se převede například <
>
symboly na příslušný kód:<
a >