问题

为什么Google会在(1); 之前为他们的(私人)JSON回应附加

例如,以下是 Google日历中打开和关闭日历的响应:< / p>

while(1);[['u',[['smsSentFlag','false'],['hideInvitations','false'],
  ['remindOnRespondedEventsOnly','true'],
  ['hideInvitations_remindOnRespondedEventsOnly','false_true'],
  ['Calendar ID stripped for privacy','false'],['smsVerifiedFlag','true']]]]

我假设这是为了防止人们对它执行 eval(),但你真正要做的是替换 while 设置.我假设eval的预防是确保人们写安全的JSON解析代码.

我已经看到这在其他几个地方使用,但更多的是谷歌(邮件,日历,联系人等).奇怪的是, Google文档开头为&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp; ,Google通讯录似乎以< code> while(1); &amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;

这里发生了什么?



解决方法

它阻止 JSON劫持.

建议的范例:假设Google有一个像 mail.google.com/json?action=inbox 这样的网址,以JSON格式返回收件箱的前50条讯息.其他网域上的恶意网站无法根据同源政策获取此类数据的AJAX请求,但可以通过&lt; script&gt; 标记包含该网址.网址使用您的 Cookie访问,并通过覆盖全局数组构造函数或访问器方法,只要设置了对象(数组或散列)属性,就可以调用一个方法,允许他们读取JSON内容.

while(1); &amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp; 可防止: mail.google. com 将具有对文本内容的完全访问权限,并且可以将其删除.但是&lt; script&gt; 标记插入会盲目执行JavaScript而不进行任何处理,从而导致无限循环或语法错误.

这并不能解决跨站点请求伪造的问题.




相关问题推荐