- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
为什么 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) 开头; &&&开始&&&
。
这是怎么回事?
最佳答案
它阻止了 JSON hijacking ,一个正式的主要 JSON 安全问题 fixed在所有主流浏览器中 since 2011使用 ECMAScript 5。
人为的例子:假设谷歌有一个类似 mail.google.com/json?action=inbox
的 URL它以 JSON 格式返回收件箱的前 50 条消息。由于同源策略,其他域上的恶意网站无法通过 AJAX 请求获取此数据,但它们可以通过 <script>
包含 URL。标签。使用您的 cookie 访问 URL,并通过 overriding the global array constructor or accessor methods他们可以在设置对象(数组或散列)属性时调用一个方法,从而允许他们读取 JSON 内容。
while(1);
或 &&&BLAH&&&
防止这种情况:在 mail.google.com
的 AJAX 请求将具有对文本内容的完全访问权限,并且可以将其删除。但是一个<script>
标签插入盲目执行 JavaScript 而不进行任何处理,导致死循环或语法错误。
这没有解决 cross-site request forgery 的问题.
关于javascript - 为什么谷歌会在前面加上 while(1);他们的 JSON 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24894437/
我是一名优秀的程序员,十分优秀!