跳到主要内容
Deno 2 终于来了 🎉️
了解更多

Node 的安全问题


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

这没有道理,为什么您的代码检查工具应该完全控制您的计算机和网络?

Node 和 npm 漏洞

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

一个特别引人注目的供应链攻击发生在 ua-parser-js,它每周有大约 700 万次下载,并且被 Facebook、Amazon、Microsoft、Google 等大型科技公司使用(Facebook 的 fbjs 库每周下载量超过 500 万次,依赖于这个库)。2021 年,这个库被劫持用来将加密货币挖矿和窃取密码的恶意软件安装到主机上。如果没有对数百个依赖项进行严格的审计,数百万个下游项目将无法意识到 ua-parser-js 拥有的访问权限,从而危害更多机器和最终用户的敏感数据。

Deno:默认安全

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

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

example of running the same attack in Deno and failing

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

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