为什么 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/
相关文章:
sql - PostgreSQL:从 JSON 列中删除属性
json - 如何使用 Gradle 将 Boon 或 Jackson JSON 解析器添加到 An
ruby-on-rails - 无法在 Ubuntu 上使用 ruby 2.2.3 安装 jso
android - 从 Android 上的 URL 简单解析 JSON 并显示在 ListView
python - 尝试从 Django 中的 POST 解析 `request.body`
java - 如何为 Gson 编写自定义 JSON 反序列化器?