Roy*_*mir 6 javascript security json facebook cross-domain
众所周知,当旧浏览器的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
值得一提的是,还有其他答案带有无限循环{..}!:
同样在这里(对象,无限循环)
此攻击(将 JSON 作为 加载<script>)基于一些假设:
1)JSON本身是有效的JS(这就是for(;;)变化的地方),这也意味着它不能以a开头{,因为这是一个块语句,不包含键值对:
 { "a": 1 } // invalid JS, valid JSON *
 [{ "a": 1 }] // valid JS, valid JSON
2) 浏览器非常旧(<总用户的1%),因为用文字构造数组不会Array在较新的浏览器中调用该函数(ES5 支持是对这些浏览器的一个很好的估计)。
因此,在这种情况下,这种攻击是不可能的,因为您提到的 API 返回一个对象,因此 (1) 未满足。即使 API 返回一个数组,理论上也只有极少数人可能被劫持:
1)浏览器必须很旧,然后浏览器本身可能是一个更大的风险,浏览器甚至必须支持JavaScript。
2) 客户端必须访问恶意站点,由于各级垃圾邮件过滤器/黑名单,这种可能性很小。
3)用户在访问恶意网站时必须登录facebook。
值得一提的是,还有其他一些无限循环的响应
我想这通常已经成为过去了。所有 API 都需要一段时间才能重构/迁移。如果考虑到 Facebook 的规模,我认为添加/删除这 5 个字符会导致巨大的开销。
*:如果你尝试加载,{ a: 1 }你会发现它不会抛出语法错误!然而,这既不是有效的 JSON,也不会创建对象(它是 blocn 语句内标记为 1 的对象)。
| 归档时间: | 
 | 
| 查看次数: | 229 次 | 
| 最近记录: |