使用 Deno 的 npm 构建更安全的 Web
npm 使软件易于访问和使用,促进了 JavaScript 社区的发展和丰富。然而,由于 Node 在安装和运行依赖项时会授予对文件系统、环境、互联网等的完全访问权限,Node 程序更容易受到供应链攻击。
供应链攻击并非新鲜事。但鉴于 npm 注册表是全球最大的,并且越来越多的 JavaScript 开发者使用它来构建应用程序和网站,npm 成为了这些依赖项攻击的持续目标。
Deno 让 npm 变得更好,使用 Deno 进行构建更安全,因为 Deno 默认安全的独特沙盒架构有助于缓解基于依赖项的攻击。
默认安全
据报道,恶意 npm 模块会窃取表单中的用户数据、执行 shell 注入攻击,并在您的机器上安装恶意软件。这些攻击在 Node 中更常见,因为 Node 应用程序(及其依赖项)都对所有内容拥有不受限制的访问权限——文件系统、互联网、环境变量等。
以下是一个使用 bin 脚本混淆的特别恶毒的 shell 注入攻击演示

Deno 在沙盒中运行代码,并采用“选择加入”的权限模型。这意味着除非您明确启用,否则用 Deno 运行的程序将无法访问文件、网络或环境。访问权限需要通过命令行标志或运行时权限提示来授予
当您使用 Deno 运行脚本时,您会清楚它需要哪些访问权限。
沙盒架构
Deno 的权限模型之所以成功,是因为程序在沙盒中执行,沙盒的入口点很窄,与外部系统的 API 很少。这使得管理代码进出的所有数据变得容易。

像浏览器一样
Deno 的安全系统借鉴了现代浏览器的隐私模型。
每当您的浏览器需要访问您的网络摄像头、麦克风,甚至地理位置 API 时,它都会提示您授予权限。这意味着(理论上)您完全清楚您正在访问的网站对您的计算机拥有哪些访问权限。
Deno 也是如此,它将控制权交到您的手中。当执行第三方、不受信任的代码或随机依赖项时,您会清楚它需要哪些访问权限。
下一步是什么?
能够安全地浏览网页对于其发展和使用至关重要。使用 Deno 更容易构建更安全的 npm 网络,其沙盒化的“选择加入”权限方法有助于缓解供应链攻击。