为什么Google在JSON响应中添加了`while(1);`?

内容来自 DOC https://q.houxu6.top/?s=为什么Google在JSON响应中添加了while(1);

为什么Google在(私有)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']
  ]]
]

我猜测这是为了防止人们对其进行eval()操作,但只需要替换掉while就可以了。我猜测这个eval预防措施是为了确保人们编写安全的JSON解析代码。

我在其他几个地方也见过这种做法,但以Google(邮件、日历、联系人等)为甚。奇怪的是,谷歌文档使用的是&&&START&&&,而谷歌联系人似乎使用的是while(1); &&&START&&&

这是怎么回事?


它防止了JSON劫持,这是一项主要的JSON安全问题,自2011年以来已在所有主要浏览器中正式修复(https://security.stackexchange.com/questions/155518/why-json-hijacking-attack-doesnt-work-in-modern-browsers-how-was-it-fixed)。

牵强的例子:假设Google有一个URL,如mail.google.com/json?action=inbox,它会以JSON格式返回您的收件箱中的前50条消息。其他域上的恶意网站由于同源策略无法发出AJAX请求来获取这些数据,但它们可以通过<script>标签包含该URL。URL使用的cookie访问,通过覆盖全局数组构造函数或访问器方法,它们可以在设置对象(数组或哈希)属性时调用一个名为的方法,从而允许它们读取JSON内容。

while(1);&&&BLAH&&&可以防止这种情况:在mail.google.com上的AJAX请求将完全访问文本内容,并可以将其剥离。但是,插入<script>标签会盲目执行JavaScript,而没有任何处理,导致无限循环或语法错误。

这并不能解决跨站点请求伪造(cross-site request forgery)的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值