.jpg)
为什么谷歌会预先加入他们的(私有)JSON响应?while(1);
例如,以下是在 Google 日历中打开和关闭日历时的响应:
while (1);
[
['u', [
['smsSentFlag', 'false'],
['hideInvitations', 'false'],
['remindOnRespondedEventsOnly', 'true'],
['hideInvitations_remindOnRespondedEventsOnly', 'false_true'],
['Calendar ID stripped for privacy', 'false'],
['smsVerifiedFlag', 'true']
]]
]
我认为这是为了防止人们对其进行操作,但是您真正要做的就是替换它,然后您就会被设置。我认为评估预防是为了确保人们编写安全的 JSON 解析代码。eval()while
我也在其他几个地方看到过这个,但在谷歌(邮件、日历、联系人等)上更是如此。奇怪的是,Google Docs 以 开头,而 Google 联系人似乎以 .&&&START&&&while(1); &&&START&&&
这是怎么回事?

网友回答:
它可以防止通过 JSON 劫持泄露响应。
理论上,HTTP响应的内容受同源策略保护:来自一个域的页面不能从另一个域的页面获取任何信息(除非明确允许)。
攻击者可以代表您请求其他域上的页面,例如使用 or 标记,但无法获取有关结果的任何信息(标头、内容)。<script src=...><img>
因此,如果您访问攻击者的页面,它将无法从 gmail.com 读取您的电子邮件。
除了使用脚本标记请求 JSON 内容时,JSON 在攻击者的控制环境中作为 JavaScript 执行。如果攻击者可以替换数组或对象构造函数或对象构造期间使用的其他方法,则 JSON 中的任何内容都将通过攻击者的代码并被泄露。
请注意,当 JSON 作为 JavaScript 执行时会发生这种情况,而不是在解析时。
有多种对策:
通过在 JSON 数据之前放置一条语句,Google 确保 JSON 数据永远不会作为 JavaScript 执行。while(1);
只有合法页面才能真正获取整个内容,去除 ,并将其余部分解析为 JSON。while(1);
例如,在Facebook上看到过类似的事情,结果相同。for(;;);
同样,在 JSON 之前添加无效令牌(如 )可确保它永远不会被执行。&&&START&&&
这是 OWASP 推荐的防止 JSON 劫持的方法,并且侵入性较小。
与前面的对策类似,它确保JSON永远不会作为JavaScript执行。
一个有效的JSON对象,当没有被任何东西包围时,在JavaScript中是无效的,因为被解释为代码块:{ }
eval('{"foo":"bar"}')
// SyntaxError: Unexpected token :
但是,这是有效的 JSON:
JSON.parse('{"foo":"bar"}')
// Object {foo: "bar"}
因此,请确保始终在响应的顶层返回一个对象,并确保 JSON 不是有效的 JavaScript,同时仍然是有效的 JSON。
正如@hvd在注释中指出的那样,空对象是有效的 JavaScript,知道对象为空本身可能是有价值的信息。{}
OWASP 方式的侵入性较小,因为它不需要更改客户端库,并传输有效的 JSON。但是,不确定过去或未来的浏览器错误是否可以击败这一点。正如@oriadam所指出的,目前尚不清楚数据是否可以通过错误处理(例如window.onerror)在解析错误中泄漏。
Google的方式需要一个客户端库,以便它支持自动反序列化,并且可以认为在浏览器错误方面更安全。
这两种方法都需要服务器端更改,以避免开发人员意外发送易受攻击的 JSON。

网友回答:
它可以防止 JSON 劫持,这是一个主要的 JSON 安全问题,自 2011 年以来在所有主流浏览器中都正式修复了 ECMAScript 5。
人为的例子:假设谷歌有一个网址,它以JSON格式返回收件箱的前50封邮件。由于同源策略,其他域上的恶意网站无法发出 AJAX 请求以获取此数据,但它们可以通过标记包含 URL。URL 与您的 cookie 一起访问,通过覆盖全局数组构造函数或访问器方法,他们可以在设置对象(数组或哈希)属性时调用一个方法,从而允许他们读取 JSON 内容。mail.google.com/json?action=inbox<script>
或防止这种情况:AJAX 请求随意具有对文本内容的完全访问权限,并且可以将其剥离。但是标签插入会盲目地执行 JavaScript,而不进行任何处理,从而导致无限循环或语法错误。while(1);&&&BLAH&&&mail.google.com<script>
这不能解决跨站点请求伪造的问题。

网友回答:
这是为了确保其他一些网站无法做令人讨厌的技巧来试图窃取您的数据。例如,通过替换数组构造函数,然后通过标记包含此 JSON URL,恶意第三方站点可能会从 JSON 响应中窃取数据。通过在开头放置 a,脚本将改为挂起。<script>while(1);
另一方面,使用 XHR 和单独的 JSON 解析器的同一站点请求可以轻松忽略前缀。while(1);
模板简介:该模板名称为【为什么谷歌会在 while(1) 之前加注;到他们的 JSON 响应?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。