什么样的json答案开头)]}'

ari*_*ero 13 ajax google-plus-one

我注意到一些json查询,特别是在谷歌服务中,返回一个特殊的"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'
Run Code Online (Sandbox Code Playgroud)

从那里,一个典型的阵列如下.因此,完整的答案是两行"标题",然后是一个数组,但"标题"非常令人费解,我想知道它是来自标准的ajax库还是只是这些人的想法.

啊,如果您使用Chrome的开发者工具查看实际查询,您会看到相同的内容.所以我被诱导认为它是一个真正的答案,而不是查询的工件.

Dav*_*ard 17

在消息开头使用无效的JSON是一种破解CSRF组合和对JavaScript的数组构造函数的棘手攻击的方法.

如果该URL返回了一个有效的,未包装的数组,那么您访问的任何站点都可能使Array函数超载,在页面上放置/注入该Google+ URL的脚本引用,并在您只是加载其页面时获取私有/安全数据.

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

您将在许多高端站点上看到类似的方法,这些站点返回JSON数组以响应GET请求.for (;;);例如,Facebook用它们填充它们.如果您尝试在这些Facebook API上使用CSRF攻击,浏览器只会在远程站点上进入无限循环,并引用Facebook的私有API.在Facebook.com上,他们的客户端代码有机会在运行JSON.parse()之前删除它.