浏览器沙箱

Mariko Kosaka

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

“沙箱”的概念

browser as a sandbox
图:浏览器作为沙箱

现代 Web 浏览器构建于“沙箱”的概念之上。沙箱是一种安全机制,用于在受限环境中运行应用程序。就像游乐场上的物理沙箱一样,孩子们可以在边界内随意创造任何东西,而不会弄脏其他地方,应用程序代码也可以在受限环境中自由执行。例如,JavaScript 可以添加和修改页面上的元素,但可能被限制访问外部 JSON 文件。这是由于一个名为同源的沙箱功能。

为什么沙箱是必要的?

每天,Web 用户都会多次下载任意代码并在他们的计算机或手机上执行它。如果有人告诉你“嘿!下载并运行这个应用程序!”,你可能会停下来思考该应用程序是否来自可信来源,查阅应用程序供应商,或仔细查看评论。如果有人向你发送一个 URL 说“看看这篇博文”呢?你可能会毫不犹豫地点击它,而不会问“这个网站会下载什么样的 JavaScript?”之类的问题。

浏览器沙箱是使 Web 浏览变得顺畅的关键功能,因为它使运行任意代码更安全。

通过设计使其安全

如果浏览器正在沙箱化每个 Web 应用程序,我们还需要关心安全吗?当然要!

首先,沙箱功能不是完美的盾牌。即使浏览器工程师努力工作,浏览器也可能存在漏洞,攻击者也总是试图绕过沙箱(例如使用 Spectre 攻击)。

沙箱有时可能会妨碍创建出色的 Web 体验。例如,浏览器可能会阻止对托管在不同域上的图像的 fetch 请求。您可以通过启用跨域资源共享(简称 CORS)来共享不同域上的资源,但如果操作不当,您可能会将资源暴露给 Web 上的所有人,从而从根本上取消沙箱。

总结

只有将安全性融入应用程序的设计中,才能实现安全的 Web 体验,而强大的设计始于理解现有功能。接下来的两个指南将深入探讨 CORS 和同源策略。