为什么 Google 在他们的 JSON 响应前加上 `while(1);`?

Google 在 JSON 响应前添加 `while(1);` 是为了防止 JSON 劫持,确保数据不被恶意执行。文中介绍了多种防御措施,包括确保 JSON 永远不执行、确保 JSON 不是有效的 JavaScript 以及始终以对象形式返回 JSON,以增强数据安全性。
摘要由CSDN通过智能技术生成

在浏览一些前端开发中的问题时,可能不少开发者都注意到 Google 的 JSON 响应前面会有一个奇怪的 while(1); 声明。这是什么缘故呢?本文将详细解释这种做法背后的技术原因。

防范 JSON 劫持

这是为了防止通过 JSON 劫持(JSON Hijacking)来泄露响应内容。理论上,HTTP 响应的内容应该由同源策略(Same Origin Policy)保护,来自不同域的页面无法获取信息,除非特意授权给这些页面。

尽管同源策略在正常情况下提供了保护,但攻击者仍能通过某些手段发起请求,例如通过使用 <script src=...><img> 标签。不过,这样攻击者无法获取关于结果的任何信息(如头信息、内容)。

例如,当你访问某个攻击网站时,即使这个网站能够通过脚本标签请求到你在 gmail.com 上的邮件,它也不能读取这些邮件的内容。

然而,当使用脚本标签请求 JSON 内容时,JSON 会作为 JavaScript 在攻击者控制的环境中执行。如果攻击者能够替换数组或对象构造函数,亦或是在对象构造期间使用的某些方法,JSON 中的任何内容都将通过攻击者的代码,并泄露出去。

需要注意的是,这种情况发生在 JSON 作为 JavaScript 执行时,而不是在 JSON 被解析时。

多种防御措施

确保 JSON 永远不执行

通过在 JSON 数据前放置一个 while(1); 声明,Google

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JKooll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值