通过创建无法解析的(“不可解析的碎片”)JSON 增加安全性?
通过创建无法解析的(“不可解析的碎片”)JSON 增加安全性?
我们正在考虑使用无法解析的 curft 方法作为我们 JSON 的额外安全层。
在研究各种方法时,我发现了 Google 的 while(1);
和 Facebook 的 for(;;)
,还有一个提到 {}&&
的。
我看到了有关 while(1);
的注释,说数字 1 可能会被覆盖,所以我的方法打算用 for(;;);
。
然后我发现了 {}&&
,它使 JSON 无效,但仍然可以解析/评估。有关参考,请参阅此文章:http://www.sitepen.com/blog/2008/09/25/security-in-ajax/
你们的方法是什么?使用无法解析的 curft 时,你们的函数是什么样子的?
admin 更改状态以发布 2023年5月21日
我通常使用一个根对象。如下所述:
只有当根为数组时,才有可能劫持JSON数据。当根为基本类型时,基本类型的值不会触发构造函数。当根为对象时,它不是有效的JavaScript语法,因此无法解析。
请注意,仅有根基本类型(例如,您的响应仅为5
)是无效的JSON。 RFC的第2节声明:
JSON文本是序列化的对象或数组。
JSON-text = object / array
这并不是什么负担,因为我(以及许多网站)通常使用“信封”格式。例如:
{ "header": {...}, "data": {...} }
或者:
{ "status": {...}, "data": {...} }
等等。
在这种情况下,任何数组都将是数据值,因此您可以提供语法上有效的JSON,而没有任何劫持风险。