每次(使用内置)URL从浏览器的地址栏中测试新内容时,我都会遇到相同的旧错误:returning Json``MVC JsonResult helper
URL
returning Json``MVC JsonResult helper
此请求已被阻止,因为当在.NET中使用敏感信息时,敏感信息可能会泄露给第三方网站GET request。要允许GET requests,请设置JsonRequestBehavior为AllowGet。
GET request
GET requests
JsonRequestBehavior
AllowGet
这次,我没有为确认而烦恼并解雇Fiddler来执行发布请求,而是想知道一个GET请求暴露了一个POST请求没有暴露的确切含义是什么?
GET
POST
假设您的网站具有GetUser网络方法:
GetUser
http://www.example.com/User/GetUser/32
返回JSON响应:
{ "Name": "John Doe" }
如果此方法仅接受POST请求,则仅当http://www.example.com/User/GetUser/32使用POST方法发出AJAX请求时,内容才会返回到浏览器。请注意,除非您实施了CORS,否则浏览器将保护数据免受来自其他域的请求。
但是,如果您允许GET请求,然后再使用GET而不是POST发出与上述类似的AJAX请求,则恶意用户可以通过使用scriptHTML中的标记将JSON包含在其自己的站点上下文中。例如www.evil.com:
script
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)不是已知问题。