通过创建不可评估的(“不可解决的”)JSON来提高安全性?

时间:2012-04-25 23:13:22

标签: json security parsing taint

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

在查看方法时,我遇到了谷歌的while(1);和Facebook的for(;;);然后又提到{}&&

我看到围绕while(1);的评论说1是数字可以被破坏,所以我的方法将是for(;;);

然后我遇到了{}&&,它使json无效但仍然可以解析/评估。请参阅此文章以供参考:http://www.sitepen.com/blog/2008/09/25/security-in-ajax/

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

1 个答案:

答案 0 :(得分:2)

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

  

只能使用作为数组的根来劫持JSON数据。   当根是基元时,原始值不会触发a   构造函数。当根是一个对象时,它不是有效的JavaScript   语法,因此无法解析。

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

  

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

  JSON-text = object / array

这不是一个负担,因为我(和许多网站)通常使用信封格式。 E.g:

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

或:

{
  "status": {...},
  "data": {...}
}

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