谷歌返回这样的json:
throw 1; <dont be evil> { foo: bar}
和 Facebook 的 ajax 有这样的 json:
for(;;); {"error":0,"errorSummary": ""}
- 他们为什么要放置会停止执行并生成无效 json 的代码?
- 如果它无效,他们如何解析它并且如果您尝试评估它会崩溃?
- 他们只是从字符串中删除它吗(看起来很贵)?
- 这有什么安全优势吗?
响应它是出于安全目的:
如果抓取工具在另一个域上,他们将不得不使用script
标签来获取数据,因为 XHR 无法跨域工作。即使没有for(;;);
攻击者如何获取数据?它没有分配给变量,所以它不会因为没有对它的引用而被垃圾收集吗?
基本上要获得跨域的数据,他们将不得不这样做
<script src="http://target.com/json.js"></script>
但即使没有崩溃脚本,攻击者也不能使用任何 Json 数据,除非将其分配给您可以全局访问的变量(在这些情况下不是这样)。崩溃代码实际上什么也不做,因为即使没有它,他们也必须使用服务器端脚本来使用他们站点上的数据。