什么样的json回答开始)]}'

我注意到一些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的开发工具来查看实际的查询,你会看到相同的结果。 所以我被诱导认为它是一个实际的答案,而不是查询的人工产物。


在消息的开始部分使用无效的JSON是击败CSRF和对JavaScript的数组构造函数的棘手攻击的一种方法。

如果该URL返回了有效的解包数组,那么您访问过的任何站点都可能会重载Array函数,将脚本引用放置/注入页面上的该Google+ URL,并在您简单加载页面时获取私有/安全数据。

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

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

链接地址: http://www.djcxy.com/p/53521.html

上一篇: What kind of json answer starts with )]}'

下一篇: Algorithm to find if a set of point describes a convex enveloppe