问题(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 中的枚举

    枚举也就是一一列举,常用来表示那些可以明确范围的集合,比方说性别,季节,星期,月份等. 在 JDK 1.5 才出现枚举类,在没有出现枚举类之前,我们要表示几个确定的值通常会使用常量来表示,形如 pub ...

  2. nginx + uswgi +django

    适合ubuntu 系统,不只是树莓派 安装必要软件 pt-get install build-essential psmisc apt-get install python-dev libxml2 l ...

  3. 《jQuery基础教程》读书笔记

    最近在看<jQuery基础教程>这本书,做了点读书笔记以备回顾,不定期更新. 第一章第二章比较基础,就此略过了... 第三章 事件 jQuery中$(document).ready()与j ...

  4. 表单验证插件validate

    http://www.runoob.com/jquery/jquery-plugin-validate.html <!DOCTYPE html> <html lang="e ...

  5. django设置数据库事务,通过异常处理回滚事务

    1.setting.py配置文件,开启事务ATOMIC_REQUESTS DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql' ...

  6. BZOJ1597 USACO2008土地购买

    斜率优化DP. #include<bits/stdc++.h> using namespace std; ; long long f[N],n,cnt,q[N]; ; bool v[N]; ...

  7. BZOJ 2333: [SCOI2011]棘手的操作 可并堆 左偏树 set

    https://www.lydsy.com/JudgeOnline/problem.php?id=2333 需要两个结构分别维护每个连通块的最大值和所有连通块最大值中的最大值,可以用两个可并堆实现,也 ...

  8. 聊聊用CSS3来玩立方体

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 虽然现在很多浏览器都还不支持css3的3D转换,不过估计也已经有很多人都有玩css3的3D了......所以我这篇也就相当于水一下了,哈哈 ...

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

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

  10. Shell 学习笔记之传递参数

    传递参数 设置权限 chmod +x file.sh 传递参数 ./file.sh parameter1 ... 特殊字符 $# 传递到脚本的参数个数 $* 以一个单字符串的形式显示所有向脚本传递的参 ...