javascript - 为什么 Google 在前面加上 while(1);到他们的 JSON 响

为什么 Google 在他们的(私有(private))JSON 响应中添加 while(1);

例如,这是在 Google Calendar 中打开和关闭日历时的响应:

while (1);
[
  ['u', [
    ['smsSentFlag', 'false'],
    ['hideInvitations', 'false'],
    ['remindOnRespondedEventsOnly', 'true'],
    ['hideInvitations_remindOnRespondedEventsOnly', 'false_true'],
    ['Calendar ID stripped for privacy', 'false'],
    ['smsVerifiedFlag', 'true']
  ]]
]

我认为这是为了防止人们对其执行 eval(),但您真正需要做的就是替换 while 然后您会被设置的。我认为 eval 预防是确保人们编写安全的 JSON 解析代码。

我在其他几个地方也看到过这种用法,但在 Google 中使用得更多(邮件、日历、联系人等)。奇怪的是,Google Docs而是以 &&&START&&& 开头,而 Google 通讯录似乎以 while(1) 开头; &&&START&&&.

这是怎么回事?

最佳答案

它可以防止 JSON hijacking ,一个主要的 JSON 安全问题,正式名称为 fixed在所有主流浏览器中since 2011使用 ECMAScript 5。

人为的例子:假设 Google 有一个类似 mail.google.com/json?action=inbox 的网址它以 JSON 格式返回收件箱的前 50 条消息。由于同源策略,其他域上的邪恶网站无法发出 AJAX 请求来获取此数据,但它们可以通过 <script> 包含 URL标签。使用 您的 cookie 和 overriding the global array constructor or accessor methods 访问 URL只要设置了对象(数组或哈希)属性,他们就可以调用一个方法,从而允许他们读取 JSON 内容。

while(1);&&&BLAH&&&防止这种情况:mail.google.com 的 AJAX 请求将拥有对文本内容的完全访问权限,并且可以将其剥离。但是一个<script>标签插入盲目地执行JavaScript,不做任何处理,导致死循环或语法错误。

这并没有解决 cross-site request forgery 的问题.

关于javascript - 为什么 Google 在前面加上 while(1);到他们的 JSON 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/871505/

相关文章:

c# - 将 JSON 转换为数据表

sql - PostgreSQL:从 JSON 列中删除属性

json - 如何使用 Gradle 将 Boon 或 Jackson JSON 解析器添加到 An

ruby-on-rails - 无法在 Ubuntu 上使用 ruby​​ 2.2.3 安装 jso

android - 从 Android 上的 URL 简单解析 JSON 并显示在 ListView

c# - 将 JSON 字符串中的数据覆盖到现有对象实例

python - 尝试从 Django 中的 POST 解析 `request.body`

java - 如何为 Gson 编写自定义 JSON 反序列化器?

javascript - 将返回的 JSON 对象属性转换为(较低的第一个)camelCase

json - 当使用 Spring MVC for REST 时,如何让 Jackson 漂亮地打印