为什么谷歌的JSON响应以while(1);开头?
问题(QUESTION):
我有个问题一直很好奇就是:为什么谷歌的JSON响应以while(1);开头?举个例子,当把谷歌日历打开和关掉时,会返回这样的JSON对象:
while(1);[['u',[['smsSentFlag','false'],['hideInvitations','false'],['remindOnRespondedEventsOnly','true'],'hideInvitations_remindOnRespondedEventsOnly','false_true'],['Calendar ID stripped for privacy','false'],['smsVerifiedFlag','true']]]]
觉得这是谷歌不推荐使用eval()函数。我们需要做的是取代while,然后设置。我认为避免使用eval()函数是为了用eval()函数来确认JSON格式的字符串是否正确,从而确保程序员写出安全的JSON解析代码。我在其他一些地方也见过这个用法,但更多的是在谷歌的产品中,像谷歌的邮件、日历、通讯录等。
说来也奇怪,谷歌文档以&&&START&&&开头,但谷歌通讯录却以while(1);&&& START&&&开头。有人知道这是为什么吗?
回答1:
这可以防止JSON劫持。举个不是很恰当的例子:谷歌有一个URL:mail.google.com/json?Action=inbox ,在JSON格式下,它可以读取你的收件箱内前50条消息。由于同源策略,其他域内的坏网站却不能发出AJAX请求,以获取这些数据,但是他们可以通过重写全局数组构造函数或者存取函数,使cookies和URL间可以有一种方法,无论何时设置一个对象(数组或散列)的属性,都允许他们读取JSON内容。
while(1); 或者&&&BLAH&&& 可以防止mail.google.com上的一条AJAX请求,拥有对于文本内容的全部访问权限,并且能够将其撤销。但是同时,一 个 SCRIPT 标签的插入会在无需任何处理的情况下,盲目地执行JavaScript,最终可能导致死循环或语法错误。同时这也并不能解 决伪造的跨站请求问题。
回答2:
这是为了确保让其他网站不能偷取你的信息。例如,先 通过替换数组构造器,再通过一个 SCRIPT 标签包含这个JSON URL,恶意的第三方网站就可以从JSON响应盗取数据。把while(1);放在开头就可以解决这样的问题。在另一方面,来自同一个网站使用XHR和独 立的JSON解析器的请求,可以直接忽略while(1);。
回答3:
这将会给使用 SCRIPT 标签的第三方网站在HTML文档中插入JSON响应变得困难。值得注意的是, SCRIPT 标签
是不需要被Sa授权的哦。
回答4:
这可以防止被当作一个简单 SCRIPT 标签目标。这样的话,坏家伙就不能轻而易举地把脚本标签放到他们自己的网站,利用活动会话而有机会偷取你的数据。
为什么谷歌的JSON响应以while(1);开头?的更多相关文章
- ajax接受json响应
一.显示页面(ajax_xml.html) body部分 <!-- 支持多选的列表框 --> <select name="first" id="firs ...
- ajax接受json响应(讲义)
l 什么是json? l Json和xml比较 l Ajax如何使用JSON l Ajax接收json响应案例 什么是json? JSON (JavaScript Object Notation) 是 ...
- Jmeter(三十四)_Beanshell解析并提取json响应
1:前置条件 将fastjson-1.2.49.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中:否则会报:Typed variable declaration ...
- 一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值
定义一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值,其中,元数据表示操作是否成功与返回值消息等,返回值对应服务端方法所返回的数据. public class Response { pr ...
- 提取json响应结果值_后置处理器JSON Extractor
Json响应格式 json串中{}表示对象,[]表示数组 JSON Extractor使用json path表达式匹配,可以一次取多个变量值. $表示响应的根对象. 取子对象或对象的属性用. 取数组里 ...
- 注册页面的JSON响应方式详细分析(与前端页面交互方式之一)
控制器层 需求分析: 访问路径:`/user/reg.do` //自己根据功能需求设定的请求参数:`username=xx&password=xx&&phone=xx& ...
- JMETER从JSON响应中提取数据
如果你在这里,可能是因为你需要使用JMeter从Json响应中提取变量. 好消息!您正在掌握掌握JMeter Json Extractor的权威指南.作为Rest API测试指南的补充,您将学习掌握J ...
- 如何使用JMETER从JSON响应中提取数据
如果你在这里,可能是因为你需要使用JMeter从Json响应中提取变量. 好消息!您正在掌握掌握JMeter Json Extractor的权威指南.作为Rest API测试指南的补充,您将学习掌握J ...
- Jmeter_Beanshell解析并提取json响应
1:前置条件 将fastjson-1.2.49.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中:否则会报:Typed variable declaration ...
随机推荐
- 机器学习之路: python 线性回归LinearRegression, 随机参数回归SGDRegressor 预测波士顿房价
python3学习使用api 线性回归,和 随机参数回归 git: https://github.com/linyi0604/MachineLearning from sklearn.datasets ...
- 韩梦飞沙Android应用集合 想法
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 那些收藏的图片 那些收藏的微博 那些收藏的音乐 定时短信 音乐列表汇 每天都是快乐的
- 王彪-20162321《程序设计与数据结构2nd》-第十一周学习总结与实验报告
邻接矩阵实现 例图 分析 变量 需要一个链表来保存数据-即保存结点 需要一个二维数组来保存每个变得权值,有则填入具体数值,没有则用0 定义一个保存边个数的值 函数方法 得到图中边的个数 得到结点的数据 ...
- [HDU6203]ping ping ping
题目大意: 给你一棵树,其中有一些点是坏掉的.告诉你k个点对表示这两个点的路径上至少有1个点是坏掉的.问整棵树上至少有多少点是坏的. 思路: 贪心. 找出每组点对的LCA,对所有点对按照LCA的深度排 ...
- poj 3463 次短路
题意:给定一个有向图,问从起点到终点,最短路+比最短路距离长1的路的个数. 当年数据结构课程设计用A*做过,现在忘光了,2333 #include<stdio.h> #include< ...
- 【失踪人口回归】第11届东北地区大学生程序设计竞赛——Time to make some change
对哈尔滨出租车和纸质题目和2148473647的吐槽都被毕克神牛在知乎上(https://www.zhihu.com/question/59782275/answer/169402588)pick/b ...
- 安卓中WebKit的使用
1.在安卓开发中,使用webkit显示网页 步骤: ①初始化一个webkit控件: ②获取webkit的WebSettings对象: ③设置javascript为enable ④为webkit设置&q ...
- Redis系列之(一):10分钟玩转Redis
1. Redis介绍 Redis是一个开源的使用ANSI C语言编写.基于内存的Key-Value数据库. 它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集 ...
- Git_忽略特殊文件
有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示“Untracked files ...”,有强迫症的童鞋心里 ...
- Duplicate Elimination in Scrapy(转)
之前介绍 Scrapy 的时候提过 Spider Trap ,实际上,就算是正常的网络拓扑,也是很复杂的相互链接,虽然我当时给的那个例子对于我感兴趣的内容是可以有一个线性顺序依次爬下来的,但是这样的情 ...