我发现一个以结束括号开头的JSON文件用于谷歌的一项服务。以下是一个示例,您可以看到它在主数据部分之前有结束括号和单引号。我检查了获取此JSON数据的javascript代码。他们正在做的是在解析数据之前手动删除第一个连续括号。
)]}'
["value1", "value2"]
这是我的问题。
这种JSON格式有效吗?
任何人都知道他们为什么要这样做?
答案 0 :(得分:9)
这是对所谓的JSON劫持攻击的保护。在解释它之前,客户端会删除主要垃圾。
在JSON劫持漏洞利用中,用户在一个选项卡中登录到应用程序,这意味着浏览器将其身份验证令牌保存在cookie中。然后,黑客安排用户在另一个选项卡中打开恶意应用程序。该标签中的HTML包含script
标记,其src
设置为第一个应用的某些JSON API的网址。由于它是脚本标记,因此没有同源检查。由于浏览器在请求中包含有效凭据,因此第一个应用程序继续并返回JSON,可能包含机密信息。由于JSON是有效的JavaScript,浏览器会执行它,这本身不会导致任何事情发生,但黑客可以通过检查脚本标记的内容来检索JSON。
通过将垃圾放在JSON前面,它无法被解析为有效的JS。因此,浏览器出错并且不会将内容加载到恶意应用程序的脚本标记中,因此无法检查它。有各种各样的口味"不同供应商使用的垃圾;谷歌就是其中之一。
现在有几种内置的JSON劫持对策,除了没有正确设置标头的旧浏览器之外,它不再是威胁。
答案 1 :(得分:1)
@torazaburo在评论中回答说,这是出于安全原因。
这是对所谓的js劫持攻击的保护。客户端在解释它之前剥离了主要垃圾
答案 2 :(得分:-4)
是的,您的json格式有效。如果您有任何困惑,请在此链接中检查您的json格式 http://jsonlint.com/