gpt4 book ai didi

javascript - Facebook 突然可以安全地防止 JSON 劫持了吗?

转载 作者:数据小太阳 更新时间:2023-10-29 05:27:46 27 4
gpt4 key购买 nike

众所周知Facebook uses javascript responses (JS,不是 json)这是前缀 while(1) & for(;;);为了防止脚本标签在旧浏览器为 being overloaded with their Array ctor & Object ctor. 时窃取 json 数据

但是从最近的尝试来看,情况似乎不再是这样了(对于 friend 列表,我确定它被使用了)

enter image description here

注意现在,内容类型是:

content-type: application/octet-stream

但他们为什么要这么做?现在安全吗? (我知道它适用于较旧的浏览器,但仍然...)。

我知道 [..]的 ctor 有问题。但是{..}呢?的负责人?

问题:

为什么 facebook 删除了无限循环?他们现在如何缓解 json 劫持?

我的意思是,如果 <script> 现在会发生什么?标签将尝试获取“getFiriends”列表? (在非常旧的浏览器中)

注意

值得一提的是,对于 {..}还有其他响应具有无限循环!!:

enter image description here

也在这里( Object ,无限循环)

enter image description here

最佳答案

这种攻击(将 JSON 作为 <script> 加载)基于以下几个假设:

1) JSON 本身是有效的 JS(这就是 for(;;) 的变化),这也意味着它可能不以 { 开头因为这是一个 block 语句,不包含键值对:

 { "a": 1 } // invalid JS, valid JSON *
[{ "a": 1 }] // valid JS, valid JSON

2) 浏览器很旧 ( < 1% of the total users ),因为用文字构造数组不会调用 Array在较新的浏览器中运行(ES5 支持是对这些浏览器的一个很好的估计)。

因此,这种攻击在这种情况下是不可能的,因为您提到的 API 返回一个对象,因此 (1) 没有被完全填充。而且即使 API 会返回一个数组,理论上也只有极少数人会被劫持:

1)浏览器必须很老,然后浏览器本身可能是一个更大的风险,浏览器甚至必须支持JavaScript。

2) 客户端必须访问恶意网站,由于各级垃圾邮件过滤器/黑名单,这种情况不太可能发生。

3) 用户在访问恶意网站时必须在 facebook 上登录。

Worth to mention that there are still others responses with infinite loop

我想这通常已成为过去。重构/迁移所有 API 需要一段时间。如果您考虑 Facebook 的规模,我假设添加/删除这 5 个字符会导致大量开销。


*:如果您尝试加载 { a: 1 }您会发现它不会抛出 SyntaxError!然而,这既不是有效的 JSON,也不会创建对象(它在 blocn 语句中标记为 1)。

关于javascript - Facebook 突然可以安全地防止 JSON 劫持了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55206306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com