通过创建不可评估的(“不可分析的积垢”)JSON来提高安全性?

通过创建不可评估的(“不可分析的积垢”)JSON来提高安全性?,json,security,parsing,taint,Json,Security,Parsing,Taint,我们正在考虑对json使用不可解析的curft方法作为额外的安全级别 在研究这些方法时,我遇到了谷歌的while(1)和facebook的(;;);然后再提到{}& 我看到了关于while(1)的评论表示1是数字可能会被破坏,所以我的方法是(;)的 然后我遇到了{}&,这使得json无效,但它仍然可以被解析/评估。参考本文: 你的方法是什么?使用不可解析的curft进行ajax调用时,您的函数是什么样子的?我总是使用根对象。如前所述: 只有根是数组的JSON数据才有可能被劫持。 当根是基元时,基

我们正在考虑对json使用不可解析的curft方法作为额外的安全级别

在研究这些方法时,我遇到了谷歌的
while(1)
和facebook的(;;);然后再提到
{}&

我看到了关于
while(1)的评论表示1是数字可能会被破坏,所以我的方法是(;)的

然后我遇到了
{}&
,这使得json无效,但它仍然可以被解析/评估。参考本文:


你的方法是什么?使用不可解析的curft进行ajax调用时,您的函数是什么样子的?

我总是使用根对象。如前所述:

只有根是数组的JSON数据才有可能被劫持。 当根是基元时,基元值不会触发 构造器。当根是对象时,它不是有效的JavaScript 语法,因此无法解析

请注意,具有根原语(例如,您的响应只是
5
)是无效的JSON。第2节说:

JSON文本是序列化的对象或数组

  JSON-text = object / array
这并不是什么负担,因为我(和许多网站)通常使用信封格式。例如:

{
  "header": {...},
  "data": {...}
}
或:

等等


在这种情况下,任何数组都只是数据的值,因此您可以提供语法有效的JSON,而不存在任何劫持风险。

这些都与JSON无关。如果有人希望使用
eval
,那么修复方法的负担完全在他们身上。。。此外,这篇文章可以追溯到2008年,当时正确的JSON解析在浏览器上并不普遍。如今,它要么是标准的
JSON.parse
,要么作为垫片随时可用。我不赞成这样的“安全”措施。两篇关于“不可解析的积垢”的帖子如下:(实际上,似乎数组构造函数劫持方法即使使用“不可解析的积垢”,如果有数组的话也是有效的…@pst-奇怪的是你为什么不这样做-谷歌和facebook都将这些方法作为额外的安全层使用。虽然更现代的浏览器是安全的,但我们仍然可以从旧浏览器获得流量。@pst,首先,它不是对
eval
的防御。这是对使用
的第三方网站的防御。第二,如果脚本没有解析,数组就无法构造,因此JSON劫持将失败。你从哪里获得上述信息/引号?@Jason,来自你链接的文章,RFC除外。然而,其他地方也提出了类似的观点。我也向互联网架构师表达了这一点,但他们表示,他们已经阅读了其他文章,其中提到劫持仍然可以发生在具有顶级opobject的json响应上(这是我的论点——如果所有的回复都有一个顶级论点,那么实际上,这使它们更加安全)@Jason,我想看看那些引用。另外,如果存在这样的漏洞,很容易进行演示。
{
  "status": {...},
  "data": {...}
}