将JsonRequestBehavior设置为AllowGet时,可以披露什么“敏感信息”?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (41)

URL每当我returning Json使用内置的浏览器地址栏进行测试时,我都会收到相同的旧错误MVC JsonResult helper

此请求已被阻止,因为敏感信息可能会在第三方网站上被披露GET request。允许GET requests,设置JsonRequestBehaviorAllowGet

而不是咕in地承认,并激发了提琴手做了一个发布请求,这一次,我想知道一个GET请求公开的POST请求不是什么?

提问于
用户回答回答于

说你的网站有一个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 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);

扫码关注云+社区