將 JsonRequestBehavior 設置為 AllowGet 時可能會洩露哪些“敏感資訊”
每次我
URL從瀏覽器的地址欄中測試新的returning Json(使用內置的MVC JsonResult helper)時,我都會遇到同樣的舊錯誤:此請求已被阻止,因為在
GET request. 要允許GET requests,設置JsonRequestBehavior為AllowGet。
GET而不是咕噥著確認並啟動 Fiddler 來做一個發布請求,這一次,我想知道一個請求暴露了一個POST請求沒有暴露的究竟是什麼?
假設您的網站有一個
GetUserweb 方法:
http://www.example.com/User/GetUser/32它返回一個 JSON 響應:
{ "Name": "John Doe" }
http://www.example.com/User/GetUser/32如果此方法只接受 POST 請求,那麼只有在使用 POST 方法發出 AJAX 請求時,才會將內容返回給瀏覽器。請注意,除非您已實施CORS,否則瀏覽器將保護來自其他域向您發出此請求的數據。但是,如果您隨後允許 GET 請求以及使用 GET 而不是 POST 發出類似於上述的 AJAX 請求,則惡意使用者可以通過
script在 HTML 中使用標籤將您的 JSON 包含在他們自己網站的上下文中。例如www.evil.com:<script src="http://www.example.com/User/GetUser/32"></script>這個 JavaScript 應該是沒用的,
www.evil.com因為應該沒有辦法讀取你的 web 方法返回的對象。但是,由於舊版本瀏覽器(例如 Firefox 3)中的錯誤,JavaScript 原型對象可能會被重新定義,並且可以www.evil.com讀取您的方法返回的數據。這稱為 JSON 劫持。有關防止這種情況的一些方法,請參閱這篇文章。但是,對於現代瀏覽器(Firefox、Chrome、IE)的較新版本,這不是一個已知問題。
在您的回報中使用以下內容:
return this.Json("you result", JsonRequestBehavior.AllowGet);