一尘不染

哪种json答案以)]}'开始

ajax

我注意到一些json查询,特别是在Google服务中,返回一个特殊的“ json”,它以一个关闭序列开头,然后只是一个数组结构,用方括号指定。

这是什么样的ajax?是否有一些库,js或py,正在解析它?

举一个更具体的例子:

>>> import json
>>> import urllib2
>>> url=urllib2.urlopen("https://plus.google.com/u/0/_/socialgraph/lookup/visible/?o=%5Bnull%2Cnull%2C%22114423404493486623226%22%5D")
>>> url.readline()
")]}'\n"
>>> url.readline()
'\n'
>>> url.readline()
'[["tsg.lac",[]\n'

然后是一个典型的数组。因此,完整的答案是两行“标头”然后是一个数组,但是“标头”非常令人困惑,我想知道它是否来自标准ajax库,或者仅仅是这些家伙的想法。

嗯,如果您使用Chrome的开发人员工具来查看实际查询,就会看到相同的内容。因此,我被认为是一个实际的答案,而不是查询的人工产物。


阅读 196

收藏
2020-07-26

共1个答案

一尘不染

在消息开头使用无效的JSON是一种克服CSRF和对JavaScript的数组构造函数进行棘手攻击的组合的方法。

如果该URL返回了有效的,未包装的数组,那么您访问的任何网站都可能会使Array函数超载,在页面上放置/注入对该Google+
URL的脚本引用,并在您仅加载其页面时收集您的私有/安全数据。

Google自己的客户端代码可以在解析无效的JSON之前将其删除,因为它使用的是传统的XHR请求,从而使他们可以访问原始响应。远程站点只能通过脚本元素注入来访问它,并且没有机会在浏览器解析数据之前对其进行预处理。后者类似于JSONP的工作方式,其中Array构造函数无意间成为了回调函数。

您会在许多知名网站上看到类似的方法,这些网站会返回JSON数组以响应GET请求。for (;;);例如,Facebook
用来填充它们。如果您尝试在这些Facebook
API上使用CSRF攻击,则浏览器仅在远程站点上输入一个无限循环,引用Facebook的私有API。在Facebook.com上,他们的客户端代码可以在运行JSON.parse()之前将其剥离。

2020-07-26