gpt4 book ai didi

security - 您是否更喜欢将 JSON 数组包装在另一个 JSON 对象中,还是始终需要 POST 来防止 JSON 劫持?

转载 作者:行者123 更新时间:2023-12-02 12:44:35 25 4
gpt4 key购买 nike

我最近开始研究使用 .NET MVC 构建 Web 应用程序,并且偶然发现了 Phil Haack 的这篇博客文章:JSON Hijacking 。对于那些在使用 JSON 传输敏感数据时不知道此漏洞的人来说,它确实是必读的。

看来有3种方法可以处理这个漏洞。

  1. 在 JSON 服务中需要使用 POST 而不是 GET。
  2. 将 JSON 数组响应封装在 JSON 对象中。
  3. 请勿在不受 1 或 2 保护的任何服务中公开敏感数据。

第三种替代方案并不是真正的选择,因为它确实限制了 JSON 的使用。

那么另外两个你更喜欢哪一个呢?

默认情况下,.NET MVC 2 预览版需要 POST 来进行 JSON 响应,我认为这是保护任何尚不了解此问题的开发人员的好方法。但对我来说,以这种方式打破 REST 感觉有点“hacky”。除非有人劝我放弃它,否则我会坚持将数组包装在另一个对象中并在客户端解开它。

最佳答案

我个人将所有回复都包含在评论中:

/* {
"foo": 3,
"bar": "string with *\x2F sequence in"
} */

并在 JSON.parsing 之前将其删除。这使得它无法作为脚本标记的目标。

值得注意的是,这个问题不仅与 JSON 有关,还与您提供的任何可能被解释为 JavaScript 的 HTTP 响应有关。即使是受 .htaccess 保护的文本文件,如果其格式恰好是有效的 JavaScript,也很容易通过包含第三方脚本标记而泄露。

关键是:多亏了 E4X,即使是普通的静态 XML 文档也是有效的 JavaScript。 E4X 是一个灾难性且无用的 JavaScript 扩展,由 Mozilla 实现和发明,它允许您编写 <element>content</element> JS 中内联 XML 文字;因此, protected XML 文件现在容易遭受与 JSON 相同的跨站点泄漏风险。谢谢莫兹拉。请参阅Google doctype的文章对此进行了介绍。

关于security - 您是否更喜欢将 JSON 数组包装在另一个 JSON 对象中,还是始终需要 POST 来防止 JSON 劫持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1617505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com