浏览器沙盒

Mariko Kosaka

为了防御攻击,开发者需要缓解漏洞并向应用添加安全功能。幸运的是,在网络上,浏览器提供了许多安全功能。有些功能可供开发者选择启用,有些功能默认处于开启状态以保护用户。

“沙盒”的概念

将浏览器用作沙盒
图:浏览器作为沙盒

现代网络浏览器基于“沙盒”的概念构建而成。沙盒是一种安全机制,用于在受限环境中运行应用。就像游乐场里的实体沙盒一样,孩子们可以在边界内随意创造,而不会弄得其他地方一团糟,应用代码也可以在受限环境中自由执行。例如,JavaScript 可以在网页上添加和修改元素,但可能会被限制访问外部 JSON 文件。这是因为存在一个名为同源的沙盒功能

为什么需要沙盒?

每天,网络用户都会多次下载任意代码并在其计算机或手机上执行这些代码。如果有人对您说“嘿!下载并运行此应用!”,您可能会停下来思考该应用是否来自可信来源,仔细阅读应用供应商的信息,或查看评价。如果有人向您发送一个网址,并说“看看这篇博文”呢?您可能会直接点击该网址,而不会问“此网站会下载哪种 JavaScript?”之类的问题。

浏览器沙盒是一项关键功能,它使运行任意代码更安全,从而让用户可以顺畅地浏览网页。

从设计上保证安全

如果浏览器对每个 Web 应用进行沙盒化处理,我们是否还需要关心安全性?当然需要!

首先,沙盒功能并非完美的盾牌。即使浏览器 工程师非常努力,浏览器也可能存在漏洞,而攻击者 始终在尝试绕过沙盒(例如使用 Spectre 攻击)。

沙盒有时可能会妨碍打造出色的网络体验。例如,浏览器可能会阻止对托管在不同网域中的图片的提取请求。您可以通过开启跨域资源共享(简称 CORS)来共享不同网域中的资源,但如果操作不当,您可能会将资源暴露给网络上的所有人,从而实际上撤消沙盒。

小结

只有将安全性融入应用的设计中,才能实现安全的网络体验,而强大的设计始于了解现有功能。接下来的两篇指南将深入探讨 CORS 和同源政策。