小编典典

为什么有“ while(1);” 在XmlHttpRequest响应?

ajax

为什么Google会优先while(1);使用其(私有)JSON响应?

例如,这是在Google日历中打开和关闭日历时的响应:

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

我认为这是为了防止人们eval()对此进行操作,但是您真正要做的就是替换while,然后进行设置。我认为评估是为了确保人们编写安全的JSON解析代码。

我也曾在其他几个地方使用过此功能,但在Google(邮件,日历,通讯录等)中使用了更多功能。奇怪的是,GoogleDocs以开头,&&&START&&&而Google
Contacts似乎以开头while(1); &&&START&&&

这里发生了什么?


阅读 204

收藏
2020-07-26

共1个答案

小编典典

它可以防止JSON劫持,这是自2011年以来使用ECMAScript 5
在所有主要浏览器中正式修复的主要JSON安全问题。

人为的例子:假设Google有一个类似的URL
mail.google.com/json?action=inbox,它以JSON格式返回收件箱中的前50条消息。由于同源政策,其他域上的邪恶网站无法发出AJAX请求来获取此数据,但是它们可以通过<script>标记包含URL
。随 您的 cookie 一起访问URL ,并且通过覆盖全局数组构造函数或访问器方法,只要设置了对象(数组或哈希)属性,它们就可以拥有一个被调用的方法,从而允许它们读取JSON内容。

while(1);&&&BLAH&&&防止这样的:在一个AJAX请求mail.google.com将具有完全访问的文本内容,并且可以去除它扔掉。但是,<script>插入标签会盲目地执行JavaScript,而不进行任何处理,从而导致无限循环或语法错误。

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

2020-07-26