Mọi phần tử trong trang web đều có thể bị thay đổi bởi người dùng độc hại (trường ẩn, div, kiểu, lệnh gọi ajax, bạn đặt tên cho nó ...).
Điều đó nói rằng, nếu bạn đang sử dụng Câu lệnh chuẩn bị, bạn không nên lo lắng quá nhiều về SQL Injection vì mysql đã biết những câu lệnh nào sẽ được thực thi.
Thay vào đó, bạn nên khử trùng tất cả đầu ra đang được hiển thị trong một trang web.
Giả sử trong biểu mẫu của bạn, bạn đang hỏi tôi sống ở quốc gia nào theo cách này:
<select name="country">
<option value="Mexico">Mexico</option>
<option value="USA">USA</option>
<option value="Canada">Canada</option>
</select>
nhưng tôi là người dùng độc hại và tôi sử dụng trình kiểm tra mã của Chrome để thay đổi HTML của bạn và tôi chọn Mexico, nhưng thay đổi giá trị của nó thành
<script type="text/javascript">alert("Hello World");</script>
và nếu bạn xuất giá trị đó trong một trang khác theo cách này:
Your country is: <?=$country?>
Sau đó, bạn sẽ viết:
Your country is:
<script type="text/javascript">alert("Hello World")</script>
và một hộp cảnh báo sẽ bật lên với dòng chữ "Hello World"
Tôi có thể gây ra tác hại gì mà bạn có thể thắc mắc ...
Tôi có thể làm bất cứ điều gì tôi muốn với điều đó, tôi có thể ăn cắp cookie hoặc nếu giá trị đó là công khai (giả sử rằng bạn đang hiển thị giá trị đó trên trang chủ của mình), thì tôi có thể chuyển hướng người dùng của bạn đến một trang web khác, thay đổi nội dung trang web của bạn .. . bất cứ điều gì tôi muốn.
Để khử trùng đầu ra của người dùng, bạn có thể sử dụng
htmlentities
Điều đó sẽ chuyển đổi, ví dụ:<
>
ký hiệu cho mã tương ứng của nó:<
và >