Asp.net-Mvc

將 JsonRequestBehavior 設置為 AllowGet 時可能會洩露哪些“敏感資訊”

  • January 30, 2014

每次我URL從瀏覽器的地址欄中測試新的returning Json(使用內置的MVC JsonResult helper)時,我都會遇到同樣的舊錯誤:

此請求已被阻止,因為在GET request. 要允許GET requests,設置JsonRequestBehaviorAllowGet

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);

引用自:https://stackoverflow.com/questions/21452925