为什么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然后你就可以了.我认为eval预防是为了确保人们编写安全的JSON解析代码.
我已经在其他几个地方看到了这种情况,但谷歌(邮件,日历,通讯录等)的情况更是如此.奇怪的是,谷歌文档开始了&&&START&&&,谷歌联系人似乎开始while(1); &&&START&&&.
这里发生了什么?
可能重复:
为什么人们把代码放在"抛出1; <dont be evil>"and"for(;;);"在json回应之前?
我发现这种语法在Facebook上用于Ajax调用.我在for (;;);回答开始时对此感到困惑.它是干什么用的?
这是电话和回复:
GET http://0.131.channel.facebook.com/x/1476579705/51033089/false/p_1524926084=0
响应:
for (;;);{"t":"continue"}
在下面的视频中,在时间标记21:40,Microsoft PDC演示者说重要的是所有JSON都被包装,因此它不是顶级数组:
https://channel9.msdn.com/Events/PDC/PDC09/FT12
打开顶层阵列的风险是什么?
我该如何检查,看看我是否容易受到伤害?我从第三方购买了许多组件,并有外部供应商开发我的代码.
我正在使用谷歌日历玩萤火虫.我碰巧发现某些XHR请求有如下响应:
while(1);[['us','bW9yZ2FuLmNoZW5nbW9AZ21haWwuY29t 20090320/20090904 63378122163']]
它看起来像带有前缀死循环javascript语句的JSON.
我不确定为什么Google Calendar会有这种XHR响应.有关于此的任何已知的AJAX实践吗?
可以通过重写数组构造函数来利用JSON响应,或者如果恶意值不是JavaScript字符串转义的话.
让我们假设这两个向量都以正常方式处理.谷歌通过在所有JSON前加上以下内容来捕获JSON响应直接来源:
throw 1; < don't be evil' >
然后是JSON的其余部分.因此,Evil博士不能,使用此处讨论的那种漏洞利用http://sla.ckers.org/forum/read.php?2,25788获取您的cookie(假设您已登录),将以下内容放在他的网站上:
<script src="http://yourbank.com/accountStatus.json"> 
至于字符串转义规则,如果我们使用双引号,我们需要在每个前面加上反斜杠,每个反斜杠加上另一个反斜杠等.
但我的问题是,如果你正在做所有这些怎么办?
Burpsuite(自动安全工具)检测在JSON响应中返回unHTML转义的嵌入式XSS尝试,并将其报告为XSS漏洞.我有一份报告说我的应用程序包含此类漏洞,但我不相信.我已经尝试过了,我无法进行漏洞利用工作.
所以我不认为这是正确的,但我问你StackOverflow社区,要权衡.
有一个特定的案例,IE MIME类型嗅探,我认为可能会导致漏洞利用.毕竟,IE 7仍然具有"功能",无论Content-Type标头如何,都会执行嵌入在图像注释中的脚本标签.我们首先要抛开这种明显愚蠢的行为.
当然,根据旧的默认jQuery行为,JSON将由本机JavaScript解析器(Firefox中的Window.JSON)或eval()解析.在任何情况下,以下表达式都不会导致执行警报:
{"myJSON": "legit", "someParam": "12345<script>alert(1)</script>"}
我是对的还是我错的?
在浏览facebook并使用Firebug网络调试器时,我注意到facebook的AJAX响应都以空循环开始.
例:
for(;;);{...}
有谁知道为什么这样做?我认为这是为了防止某种XSS攻击,但我并不完全理解.谢谢!
众所周知,当旧浏览器的Array ctor和Object ctor重载时,Facebook使用javascript响应(JS,而不是json)作为前缀while(1)&for(;;);,以防止脚本标签窃取json数据。
但是从最近的尝试来看,似乎不再是这种情况了(对于朋友列表,我确定它已经被使用了)
注意,现在,content-type是:
content-type: application/octet-stream
但是他们为什么这样做呢?现在安全吗?(我知道这是针对较旧的浏览器的,但仍然...)。
我知道的[..]问题是有问题的。但是{..}ctor呢?
题:
Facebook为什么要删除无限循环?以及他们现在如何缓解json劫持?
我的意思是,如果<script>tag尝试获取“ getFiriends”列表,现在会发生什么?(在非常老的浏览器中)
NB
值得一提的是,还有其他答案带有无限循环{..}!:
同样在这里(对象,无限循环)
Google将Unparsable Cuft返回给json响应, 如下所示:
throw 1; <dont be evil> { foo: bar}
这是一个相关的演示
javascript ×7
json ×7
security ×5
ajax ×4
facebook ×3
jquery ×2
xss ×2
cross-domain ×1
telerik ×1