Man*_*nav 26 javascript security json
在阅读了这个问题之后,为什么google/facebook等添加了无法解决的问题:
while(1); for(;;);&&&START&&& ... &&&END&&&对他们的JSON回应,我已经理解了动机.但是,我仍然不清楚为什么会使用这种相对复杂的机制,当类似的效果可以用类似的东西来实现
)在开头添加额外的内容,使整个行无效,语法错误现在,似乎这种无限循环和(奇怪的)语法错误的附加保护将是绕过旧的和允许的javascript解析器,但我似乎找不到任何引用,表明情况就是这样.还有另一个SO问题甚至消除了while(1);解决方法(说明1可能被破坏)并拒绝表单的另一种解决方法{}&&,但没有解释为什么或引用任何来源.
其他参考:
/*-secure-\n...*/Bea*_*rtz 10
我认为有几个与无法解析的形式相关的细节:
{}&&将日期添加回JSON解析器(显然是旧版本中的Dojo),而不是将JSON字符串验证为有效的JSON语法.JSON我所知道的所有Parser库现在都在进行验证,但是这篇 2008年的博客文章表明,dojo的所述版本JSON.parse通常会允许json,而eval只是失败,这将为您提供方便的防止JSON劫持的保护.
while(1)Number通过分配0为1s的值,可以使用原型使其无效.
for(;;)并且while(1)两者都可以使被劫持的站点崩溃,这样做可以增加保护,因为任何脚本的每次进一步执行都可以有效地停止而不会出现错误.这很重要,因为定义中的错误并不标记javascript中脚本执行的结束,而a for(;;)确保在此之后不执行任何脚本.这是为了防止(据我所知假设)的情况下,攻击者成功利用中的弱点,拦截脚本错误window.onerror,重写eval或进行代理错误对象实例化(比如覆盖constructor的Error.prototype).
UPDATE
还有关于security.stackexchange的这个问题,建议不要使用for(;;)或者while(1)因为它可以暗示你的站点是DoS攻击客户端CPU或触发恶意软件扫描程序.我没有看到现代浏览器存在严重的DoS问题,因为它们运行沙盒并且基于每个选项卡基础.但它肯定是旧版浏览器的问题.恶意软件扫描程序是一个真正的问题,可能会将您的网站报告为攻击.
&&&START&&&(以及相应的&&&END&&&标记)使得接收json的客户端上的解析比仅使用)或可能无意中关闭的注释更容易,并且可以提高程序员的可读性和可见性.在评论中包装只是一种变体,因为它提供了/*开始和*/结束标记.在我看来,在开始和结束时有一个清晰明确的标记有助于注意到残骸的意义.使用评论并没有真正提供这一点.
| 归档时间: |
|
| 查看次数: |
2021 次 |
| 最近记录: |