從 ASP.NET MVC 2.0 Preview 2 開始 JsonResult 已經被修改成只能在 HTTP POST 的時候回應,像我們經常使用 jQuery 的 $.getJSON 就不能再用了,我從 ASP.NET MVC 2.0 Preview 2 Release Note 得知 JSON Hijacking 之後就持續追蹤下去,覺得這是個非常值得注意的安全問題。
前陣子 Twitter 就被發現了一個 JSON Hijacking 漏洞,可以讓使用者在進入惡意網站後被取得你所有在 Twitter 的好友清單。建議有在使用 JSON 或動態下載 JavaScript 的網站都應該特別注意!
我看了好幾篇文章,不過都是英文的,解釋的非常清楚,相關資訊請參考「相關連結」。以下我列出幾個中文的文章供各位參考:
要避免這個問題,最簡單的作法就是『不要透過 HTTP GET 送出 JSON 資料』,雖然 jQuery 沒有內建 $.postJSON 方法,但卻非常容易實做,且在官網的 jQuery.post 文件有提供一個簡單的範例如下:
$.postJSON = function(url, data, callback) {
$.post(url, data, callback, "json");
};
相關連結