跳到主要内容

Node 的安全问题


当您运行 Node 应用程序时,它可以访问所有内容——您的文件系统、互联网、环境变量。不仅是应用程序本身,还有它的所有依赖项,这使您的程序和用户暴露于潜在的、未经测试的代码中。

这没有道理——为什么你的 linter 应该完全控制你的计算机和网络?

Node 和 npm 漏洞

由于 Node 及其依赖项可以不受限制地访问所有内容,以及 npm 模块的高度可组合性,据报道,恶意 npm 模块会从表单中窃取用户数据执行 shell 注入攻击在您的机器上安装恶意软件等等。

一个特别引人注目的供应链攻击是针对 ua-parser-js,它每周下载量约为 700 万次,并在 Facebook、亚马逊、微软、谷歌等大型科技公司中使用(Facebook 的 fbjs 库每周下载量超过 500 万次,依赖于此库)。2021 年,此库被劫持,用于在主机机器上安装加密货币挖矿和密码窃取恶意软件。由于没有对数百个依赖项进行严格审计,数百万个下游项目没有意识到 ua-parser-js 拥有的访问权限,从而损害了更多机器和最终用户的敏感数据。

Deno:默认安全

Deno 从一开始就将安全性作为核心原则构建。

默认情况下,Deno 程序无法访问文件系统、网络等——您需要通过权限标志显式选择加入。Deno 的权限标志扩展到其依赖项。您不再需要对依赖项进行审计——只需运行您的程序,看看您的应用程序及其依赖项需要哪些访问权限。

example of running the same attack in Deno and failing

Deno 安全的沙箱环境意味着您可以放心地运行不受信任的代码和第三方依赖项。

了解更多关于 Deno 的安全模型