javascript - 为什么使用 POST 方法可以防止 json 劫持?
问题描述
json
在方法中返回时,我遇到了以下 ASP.NET MVC 错误Get
:
此请求已被阻止,因为在 GET 请求中使用敏感信息可能会泄露给第三方网站。要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。
显然这个漏洞被称为json Hijacking。本文解释了json
使用Get
. 但是返回json
一个Post
方法是安全的。
为什么要更改Get
以Post
防止这种攻击?
解决方案
看到这么多人试图证明JSON 劫持仍然是一个安全问题,我真的很惊讶。(当然,如果您仍然使用 Firefox 2、Opera 9 或 Safari 3)。很长一段时间以来,现代浏览器都没有这个问题。您在问题中提到的文章写于 2009 年。您可以查看此帖子以获取有关如何解决问题的更多信息。而且您无需担心JsonRequestBehavior
只允许获取和忘记。
更新
抱歉,我还没有阅读赏金问题。为什么更改发布请求可以防止 json 劫持?
您可以在此处找到一篇文章,该文章描述了 JSON 劫持攻击步骤。它如下:
- 第 1 步:让经过身份验证的用户访问恶意页面。
第 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
fromGET
到的请求类型POST
,当浏览器试图访问它时,你的服务器会拒绝它。
我也在这里留下一本解释概念的旧 MVC 框架书。
推荐阅读
- javascript - 如何使用 --constructor-args 参数运行 Hardhat?
- c# - 更改数据网格单元格颜色
- php - 具有多个扩展实体的 Symfony 唯一实体 ORM 错误别名
- react-native - 我正在尝试以 react-native 修复屏幕底部的标签栏,在输入一些文本时
- c# - 从两个来源创建客户对象
- java - 使用拆分 EIP 进行并行处理时管理线程数
- javascript - 此代码未显示编译错误,但控制台不会呈现
- python - 我无法使用带有 Python 的 winium 启动我的应用程序
- flutter - 根据 SharedPreference 数据设置主题
- python - 使用 Pytest/Python 在 Azure DevOps 中创建工作项时出错