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