在阅读有关如何避免JSON劫持的相关内容时,我发现了各种方法,包括POST一切或在响应之前加入一些内容,使它们不是有效的JavaScript。
最常见的预置方法似乎是在对象或数组前面添加{} &&
。 Angular建议使用)]}',\n
进行前置。
为什么angular不使用更标准的{} &&
方法?其中一个不完全安全吗?在JavaScript中使用哪个更困难?除了Angular之外,采取不那么流行的方法是否有充分的理由?
在阅读有关如何避免JSON劫持的相关内容时,我发现了各种方法,包括POST一切或在响应之前加入一些内容,使它们不是有效的JavaScript。
最常见的预置方法似乎是在对象或数组前面添加{} &&
。 Angular建议使用)]}',\n
进行前置。
为什么angular不使用更标准的{} &&
方法?其中一个不完全安全吗?在JavaScript中使用哪个更困难?除了Angular之外,采取不那么流行的方法是否有充分的理由?
任何阻止JSON响应被解析为JavaScript对象或数组的内容都将防止JSON劫持的这种方法。
请参见此帖子了解一些使您的JSON安全的方法。
然而,正如这个答案所述,自Firefox 3以来就不再是问题。
谷歌使用一个“无法解释的[cruft]”来防御这种类型的攻击。值得注意的是,这个漏洞已经在Firefox 3中修复,并且这个漏洞产生于浏览器实现JSON规范的方式。
在撰写本文时,谷歌似乎在其Gmail响应中添加了)]}'
。
{}
集合本身发送,只要您有多个键,它就不是有效的JS程序。我不知道为什么采取哪种方法很重要,只要它不作为脚本执行即可。开头可以是任何无效代码。这方面不需要一致性。 - cookie monster