首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将JsonRequestBehavior设置为AllowGet时可能会泄露哪些“敏感信息”

将JsonRequestBehavior设置为AllowGet时可能会泄露哪些“敏感信息”
EN

Stack Overflow用户
提问于 2014-01-30 17:49:38
回答 6查看 106.3K关注 0票数 121

每次我使用returning Json (使用内置的MVC JsonResult helper)从浏览器的地址栏测试新的URL时,都会得到相同的老错误:

此请求已被阻止,因为在GET request中使用此请求时,敏感信息可能会泄露给第三方网站。要允许GET requests,请将JsonRequestBehavior设置为AllowGet

这一次,我想知道POST请求不能公开的究竟是什么,而不是发出确认并启动Fiddler来执行post请求。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-02-01 22:06:51

假设您的网站有一个GetUser web方法:

http://www.example.com/User/GetUser/32

它返回一个JSON响应:

{ "Name": "John Doe" }

如果此方法只接受POST请求,那么只有在使用POST方法向http://www.example.com/User/GetUser/32发出AJAX请求时,内容才会返回给浏览器。请注意,除非您实现了CORS,否则浏览器将保护数据不受向您的域发出此请求的其他域的影响。

但是,如果您允许GET请求,并且使用GET而不是POST发出类似于上面的AJAX请求,恶意用户可以通过在HTML中使用script标记将您的JSON包含在他们自己的站点的上下文中。例如,在www.evil.com上:

<script src="http://www.example.com/User/GetUser/32"></script>

这个JavaScript对于www.evil.com应该是无用的,因为应该没有办法读取web方法返回的对象。但是,由于旧版本浏览器(例如Firefox3)中的错误,可能会重新定义JavaScript原型对象,并使www.evil.com能够读取您的方法返回的数据。这就是所谓的JSON劫持。

有关防止这种情况的一些方法,请参阅this post。然而,在更高版本的现代浏览器(Firefox、Chrome、IE)中,这并不是一个已知的问题。

票数 84
EN

Stack Overflow用户

发布于 2015-05-18 18:20:06

在您的回报中使用以下内容:

return this.Json("you result", JsonRequestBehavior.AllowGet);
票数 119
EN

Stack Overflow用户

发布于 2014-01-30 17:55:02

默认情况下,JSON框架不允许您使用ASP.NET有效负载响应GET请求,因为恶意用户有可能通过称为JSON劫持的过程获得对有效负载的访问权限。您不希望在GET请求中使用JSON返回敏感信息。

如果需要发送JSON来响应GET,并且不公开敏感数据,那么可以通过将JsonRequestBehavior.AllowGet作为第二个参数传递给Json方法来显式地允许这种行为。

比如

  [HttpGet] //No need to decorate, as by default it will be GET
  public JsonResult GetMyData(){  
    var myResultDataObject = buildMyData(); // build, but keep controller thin
    // delegating buildMyData to builder/Query Builder using CQRS makes easy :)
    return Json(myResultDataObject, JsonRequestBehavior.AllowGet);
  }

这是来自Phil Haack JSON Hijacking的一篇有趣的文章,关于为什么不将Json与GET方法一起使用

票数 66
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21452925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档