Giả sử trang web của bạn có GetUser
phương thức web:
http://www.example.com/User/GetUser/32
trả về phản hồi JSON:
{ "Name": "John Doe" }
Nếu phương thức này chỉ chấp nhận các yêu cầu POST, thì nội dung sẽ chỉ được trả về trình duyệt nếu một yêu cầu AJAX được thực hiện http://www.example.com/User/GetUser/32
bằng cách sử dụng phương thức POST. Lưu ý rằng trừ khi bạn đã triển khai CORS , trình duyệt sẽ bảo vệ dữ liệu khỏi các miền khác đưa ra yêu cầu này cho bạn.
Tuy nhiên, nếu bạn cho phép yêu cầu GET sau đó cũng như thực hiện yêu cầu AJAX tương tự như trên với GET thay vì POST, người dùng độc hại có thể đưa JSON của bạn vào ngữ cảnh trang web của chính họ bằng cách sử dụng script
thẻ trong HTML. ví dụ trên www.evil.com
:
<script src="http://www.example.com/User/GetUser/32"></script>
JavaScript này sẽ vô dụng www.evil.com
vì không có cách nào đọc được đối tượng mà phương thức web của bạn trả về. Tuy nhiên, do các lỗi trong các phiên bản trình duyệt cũ (ví dụ: Firefox 3), các đối tượng nguyên mẫu JavaScript có thể được xác định lại và có thể www.evil.com
đọc dữ liệu được trả về bằng phương thức của bạn. Đây được gọi là JSON Hijacking.
Xem bài đăng này để biết một số phương pháp ngăn chặn điều này. Tuy nhiên, nó không phải là một vấn đề đã biết với các phiên bản sau của các trình duyệt hiện đại (Firefox, Chrome, IE).