NPM 是否在沙箱中安装 运行?

Does NPM install run in a sandbox?

基本上是什么阻止我发布带有任意安装脚本的 NPM 模块,如果安装不是 运行 在沙箱中,当您 npm install my-malicious-package 从您的计算机窃取所有内容时?

this article 中,他们建议大多数攻击者会将他们的恶意脚本放在 pre/post install 挂钩中。这很容易检测和过滤掉。我主要关心软件包的实际安装,其中任意可能是 运行.

npm 本身 运行 包代码的唯一方法是在安装挂钩中。

如果您禁用安装挂钩,则在您实际将其加载到您的应用程序中之前,任何不受信任的代码都无法 运行(此时您已被清理)。

我制作了 node-safe,它允许您在使用 nodenpmyarn:

时使用本机 macOS 沙箱
# Allow reading files, but only in the current folder
node --enable-sandbox --allow-read="./**" myscript.js

使用沙盒包管理器时,流氓依赖项无法再通过 postinstall 脚本和其他方式危害您的系统。