当我是returning Json
时(使用内置的MVC JsonResult helper
),每次我从浏览器的地址栏测试新的URL
时,我都会收到同样的错误:
此请求已被阻止,因为在GET request
中使用此请求时,敏感信息可能会泄露给第三方网站。若要允许GET requests
,请将JsonRequestBehavior
设置为AllowGet
。
这一次,我想知道GET
请求到底暴露了POST
请求没有暴露的东西,而不是咕哝着承认并启动Fiddler去做一个post请求?
6条答案
按热度按时间m1m5dgzv1#
在返回时使用以下内容:
ecfsfe2w2#
假设您的网站具有
GetUser
web方法:http://www.example.com/User/GetUser/32
返回JSON响应:
如果此方法只接受POST请求,则只有在使用POST方法向
http://www.example.com/User/GetUser/32
发出 AJAX 请求时,内容才会返回到浏览器。请注意,除非您已实现CORS,否则浏览器将保护向您发出此请求的其他域的数据。但是,如果您允许GET请求,并且使用GET而不是POST发出类似于上述的 AJAX 请求,恶意用户可以通过在HTML中使用
script
标记将您的JSON包含在他们自己的网站上下文中。例如,在www.evil.com
上:这个JavaScript对
www.evil.com
来说应该是无用的,因为没有办法阅读你的web方法返回的对象。然而,由于旧版本浏览器(例如Firefox 3)的bug,JavaScript数组原型对象可能被重新定义,使www.evil.com
有可能读取你的方法返回的数据。这被称为JSON劫持。请参阅this post了解一些防止此问题的方法。然而,这不是现代浏览器(Firefox,Chrome,IE)的最新版本的已知问题。
nzrxty8p3#
默认情况下,ASP.NETMVC框架不允许您使用JSON负载响应GET请求,因为恶意用户有可能通过称为JSON劫持的过程获得对负载的访问权限。您不希望在GET请求中使用JSON返回敏感信息。
如果需要发送JSON来响应GET,并且不公开敏感数据,则可以通过将
JsonRequestBehavior.AllowGet
作为第二个参数传递给Json
方法来显式地允许该行为。如
这是一篇来自Phil Haack
JSON Hijacking
的有趣文章,介绍了为什么不将Json与GET方法结合使用afdcj2ne4#
当我们想从MVC应用中返回一个json对象给客户端时,需要在返回对象时显式指定JsonRequestBehavior.AllowGet,因此我返回json数据如下,以克服这个问题:
bn31dyow5#
您必须像这样使用JsonRequestBehavior.AllowGet作为Json响应:
vcudknz36#
return Json(“成功”,Json请求行为.允许获取)