Hoo*_*ini 8 javascript security ajax json csrf
json在Get方法中返回时,我遇到了以下 ASP.NET MVC 错误:
此请求已被阻止,因为在 GET 请求中使用此请求时,敏感信息可能会泄露给第三方网站。要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。
显然这个漏洞被称为json Hijacking。这篇文章解释了当json使用Get. 但是返回json一个Post方法是安全的。
为什么要改变Get以Post防止这种攻击?
看到这么多人试图证明JSON Hijacking仍然是一个安全问题,我真的很惊讶。(当然,如果您仍然使用 Firefox 2、Opera 9 或 Safari 3)。很长一段时间以来,现代浏览器都没有出现此问题。您在问题中提到的文章写于 2009 年。您可以查看此帖子以获取有关如何修复问题的更多信息。而且您无需担心JsonRequestBehavior只允许获取和忘记。
更新
抱歉,我还没有阅读赏金问题。为什么将请求更改为 post 可以防止 json 劫持?
您可以在此处找到一篇描述 JSON 劫持攻击步骤的文章。它是这样的:
第 2 步:恶意页面将尝试从用户登录的应用程序访问敏感数据。这可以通过在 HTML 页面中嵌入脚本标签来实现,因为同源策略不适用于脚本标签。
<script src="http://<jsonsite>/json_server.php"></script>
浏览器将向 json_server.php 发出 GET 请求,并且用户的任何身份验证 cookie 都将与请求一起发送。
...
你可以这样想,用户访问www.yoursite.com并获得身份验证。在该用户离开您的站点并转到恶意站点之后。如果恶意站点带有<script src="http://www.yoursite.com/some_endpoint"></script>标签,浏览器将发出 GET 请求。如果返回的数据是 JSON,该站点可以通过对象原型设置器获取敏感数据。(请记住,攻击者将尝试使用 SCRIPT 标签而不是 AJAX 请求,因为同源策略不适用于脚本标签。请参阅跨源网络访问规则。)
但是如果您将请求类型http://www.yoursite.com/some_endpoint从 from更改GET为POST,当浏览器尝试访问它时,您的服务器将拒绝它。
我还要在这里留下一本解释概念的旧 MVC 框架书。
| 归档时间: |
|
| 查看次数: |
1451 次 |
| 最近记录: |