使用 Deno 和 npm 构建更安全的 Web
npm 使软件易于获取和使用,为 JavaScript 社区发展和丰富做出了贡献。然而,由于 Node 通过授予对文件系统、环境、互联网等的完全访问权限来安装和运行依赖项,因此 Node 程序更容易受到供应链攻击。
供应链攻击并不新鲜。但鉴于 npm 注册表是世界上最大的注册表,越来越多的 JavaScript 开发人员使用它来构建应用程序和网站,因此 npm 成为这些依赖项攻击的常年目标。
Deno 使 npm 变得更好,使用它进行构建也更加安全,因为 Deno 的默认安全性和独特的沙箱架构有助于缓解基于依赖项的攻击。
默认安全
据报道,恶意 npm 模块会从表单中窃取用户数据,执行 shell 注入攻击,以及将恶意软件安装到您的机器上。在 Node 中,这些攻击发生的可能性更高,因为 Node 应用程序(及其依赖项)都拥有对一切的无限制访问权限 - 文件系统、互联网、环境变量等。
以下演示了使用 bin 脚本混淆进行的特别恶意的 shell 注入攻击。
Deno 在沙箱中运行代码,并使用“选择加入”权限模型。这意味着除非您明确启用,否则使用 Deno 运行的程序没有文件、网络或环境访问权限。访问需要通过命令行标志或运行时权限提示授予的权限。
使用 Deno 运行脚本时,您会知道它需要哪些访问权限。
沙箱架构
Deno 的权限模型之所以成功,是因为程序是在沙箱中执行的,沙箱具有狭窄的入口点,并且对外部系统的 API 很少。这使得管理进出代码的所有数据变得容易。
就像浏览器
Deno 的安全系统借鉴了现代浏览器的隐私模型。
无论何时您的浏览器需要访问您的网络摄像头、麦克风,甚至地理位置 API,它都会提示您进行许可。这意味着(理论上)您完全了解您访问的网站对您计算机的访问权限。
Deno 类似于此,因为它将控制权交到您的手中。当执行第三方不受信任的代码或随机依赖项时,您会知道它需要访问什么。
下一步是什么?
能够安全地浏览 Web 对其发展和使用至关重要。使用 Deno 构建更安全的 Web 和 npm 更容易,其沙箱、选择加入权限方法有助于缓解供应链攻击。