Setiap elemen di situs web dapat diubah oleh pengguna jahat (bidang tersembunyi, div, gaya, panggilan ajax, sebut saja...).
Oleh karena itu, jika Anda sudah menggunakan Pernyataan yang Disiapkan, Anda tidak perlu terlalu khawatir tentang SQL Injection karena mysql sudah mengetahui pernyataan apa yang akan dieksekusi.
Alih-alih, Anda harus membersihkan semua output yang sedang dirender di situs web.
Katakanlah dalam formulir Anda, Anda bertanya di negara mana saya tinggal dengan cara ini:
<select name="country">
<option value="Mexico">Mexico</option>
<option value="USA">USA</option>
<option value="Canada">Canada</option>
</select>
tetapi saya adalah pengguna yang jahat, dan saya menggunakan pemeriksa kode Chrome untuk mengubah HTML Anda, dan saya memilih Meksiko, tetapi mengubah nilainya menjadi
<script type="text/javascript">alert("Hello World");</script>
dan jika Anda menampilkan nilai itu di halaman lain dengan cara ini:
Your country is: <?=$country?>
Maka Anda akan menulis:
Your country is:
<script type="text/javascript">alert("Hello World")</script>
dan kotak peringatan akan muncul dengan teks "Hello World"
Apa salahnya saya sehingga Anda mungkin bertanya-tanya...
baik saya dapat melakukan apa pun yang saya inginkan dengan itu, saya dapat mencuri cookie atau jika nilai itu bersifat publik (katakanlah bahwa Anda menampilkan nilai itu di halaman depan Anda), maka saya dapat mengarahkan pengguna Anda ke situs web lain, mengubah konten situs web Anda.. . apa pun yang saya inginkan.
Untuk membersihkan keluaran pengguna Anda, Anda dapat menggunakan
htmlentities
Itu akan mengonversi, misalnya, <
>
simbol ke kode masing-masing:<
dan >