问题(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 标签目标。这样的话,坏家伙就不能轻而易举地把脚本标签放到他们自己的网站,利用活动会话而有机会偷取你的数据。

  原文 stackoverflow.com

为什么谷歌的JSON响应以while(1);开头?的更多相关文章

  1. ajax接受json响应

    一.显示页面(ajax_xml.html) body部分 <!-- 支持多选的列表框 --> <select name="first" id="firs ...

  2. ajax接受json响应(讲义)

    l 什么是json? l Json和xml比较 l Ajax如何使用JSON l Ajax接收json响应案例 什么是json? JSON (JavaScript Object Notation) 是 ...

  3. Jmeter(三十四)_Beanshell解析并提取json响应

    1:前置条件 将fastjson-1.2.49.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中:否则会报:Typed variable declaration ...

  4. 一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值

    定义一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值,其中,元数据表示操作是否成功与返回值消息等,返回值对应服务端方法所返回的数据. public class Response { pr ...

  5. 提取json响应结果值_后置处理器JSON Extractor

    Json响应格式 json串中{}表示对象,[]表示数组 JSON Extractor使用json path表达式匹配,可以一次取多个变量值. $表示响应的根对象. 取子对象或对象的属性用. 取数组里 ...

  6. 注册页面的JSON响应方式详细分析(与前端页面交互方式之一)

    控制器层 需求分析: 访问路径:`/user/reg.do` //自己根据功能需求设定的请求参数:`username=xx&password=xx&&phone=xx& ...

  7. JMETER从JSON响应中提取数据

    如果你在这里,可能是因为你需要使用JMeter从Json响应中提取变量. 好消息!您正在掌握掌握JMeter Json Extractor的权威指南.作为Rest API测试指南的补充,您将学习掌握J ...

  8. 如何使用JMETER从JSON响应中提取数据

    如果你在这里,可能是因为你需要使用JMeter从Json响应中提取变量. 好消息!您正在掌握掌握JMeter Json Extractor的权威指南.作为Rest API测试指南的补充,您将学习掌握J ...

  9. Jmeter_Beanshell解析并提取json响应

    1:前置条件 将fastjson-1.2.49.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中:否则会报:Typed variable declaration ...

随机推荐

  1. java main class not found

    1.确保 所有jar都存在, 清理所有不存在的jar 2.确保src以外没有java类

  2. Win10如何配置Jdk环境变量

    对于每一位做Java开发的朋友来说,Jdk是必须要安装的,安装好了Jdk,其实并没有结束,还需要配置Jdk的环境变量,系统在不断地更新,小编给大家介绍一下如何在Win10下配置Jdk,并检测是否配置成 ...

  3. JAVA 9 新特性

     Oracle已将JAVA 9的开发提上日程.OpenJDK上已经出现了关于下一个主版本JAVA 9的改进建议(JEP).与以往不同,Oracle在这次谈及了一些真正的特性.而早期对于JDK9的声明仅 ...

  4. 【洛谷】1477:[NOI2008]假面舞会【图论】

    P1477 [NOI2008]假面舞会 题目描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会. 今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具 ...

  5. Vue+Express实现前后端分离

    先说明一下缘由,因为自己前段时间在实习,实习期间为了参与项目开发,粗略学习了下Vue.Vuex.Vue-Router,大致会一些基础的.这里也快要做毕业设计了,趁着放假回来的这两天,学习下Node的相 ...

  6. Spotlight on linux 监控 linux服务器资源

    步骤一:在window主机上安装spotlight 下载地址:http://worlddownloads.quest.com.edgesuite.net/Repository/www.quest.co ...

  7. SQLite3知识(1)--教程

    1.SQLite3教程 [1].SQLite 教程 2.选择数据库: [2]. SQLite Select 语句 3.更新数据库: [3]. SQLite Update 语句 4.插入数据库: [4] ...

  8. interfacer和abstarct class的异同

  9. 如何使用git工具向github提交代码

    大致分为以下几个步骤 安装git环境,工具使用msysgit github上的账号 首先在github上点击头像旁边的加号 add new ,选择new Repository,自己创建一个名字,假设取 ...

  10. vue父子组件、兄弟组件之间的通信和访问

    注意:1. vue组件间的通信其实有很多种方法,最常用的还是属性传值.事件传值.vuex; 其他方法参考 https://juejin.im/post/5bd18c72e51d455e3f6e4334 ...