跳到主要内容
Deno 2.4 已发布,带来 deno bundle、字节/文本导入、OTel 稳定版等功能
了解更多

Node 的安全问题


当你运行一个 Node 应用程序时,它拥有对一切的访问权限——你的文件系统、互联网、环境变量。不仅是应用程序本身,它所有的依赖项也同样拥有这些权限,这使你的程序和用户暴露在潜在的不受信任、未经测试的代码面前。

这说不通——为什么你的代码检查工具(linter)应该对你的计算机和网络拥有完全控制权?

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 安全模型的信息