Cli: [问题] --ignore-scripts 仅用于安全?

创建于 2019-11-29  ·  4评论  ·  资料来源: npm/cli

出于安全目的,许多地方建议为全局配置设置忽略脚本。
这是为了防止第三方包执行任意代码。

问题是设置这个导致没有脚本运行,包括来自 npm run ...
在启用了忽略脚本的情况下执行 npm run ... 时,我也没有看到任何警告。

有没有办法纯粹出于安全考虑而忽略脚本?

Question

所有4条评论

npm 如何区分安全和不安全的脚本?

如果它可以做到这一点,为什么需要设置忽略不安全的设置?

它不会区分安全和不安全的脚本。
在顶层模块上使用 npm 命令时,它只会允许脚本。
由于所有者不是第三方,因此可以假定它是受信任的。

明白了,这是有道理的。 我从未将其设置为全局配置设置,但打破npm run会非常令人沮丧。

我已经将 ignore-scripts 设置为 true 并且很失望地发现我的项目上的 npm start 完全停止工作,根本没有输出。

我想要忽略脚本的安全性,特别是禁用安装后脚本,但能够执行我自己的脚本和第三方脚本,只有明确地使用 npm start 或 npm run。 每次我想添加一个包时都必须添加 --ignore-scripts 是非常脆弱的,因为它所需要的只是一次忘记它,你可能会被一个隐藏得很深的第三方依赖默默地妥协。

总的来说,我坚信 npm cli 的默认行为是危险的,需要以一种或另一种方式进行更改。 例如,除非明确请求或列入白名单,否则 npm 可以在执行任何脚本之前提示我。

我的雇主不愿意将 npm 引入具有当前行为的堆栈,因此我现在唯一的选择似乎依赖于在每个工作站上设置忽略脚本标志。

另外,我想指出的是,我知道添加依赖项比脚本具有更广泛的安全后果,但在我看来,由于一些原因,脚本特别危险。 在您的项目中存在恶意程序包听起来很糟糕,但至少在它执行其有效负载之前可能还有更多时间,因此有一点希望它可以被及时捕获。 此外,与直接在他们的计算机上运行并覆盖其跟踪的有效负载相比,开发人员更有可能在调试他们的代码时在 devtools 或其他东西中看到额外的提取。 带有恶意程序包的单个项目可能会危及与该项目无关的整个公司 IP。 可能很难找出问题的根源,甚至根本无法检测到是否存在漏洞。

抱歉,如果我因为我的偏执思想溢出而在这个特定问题上捎带,但我认为 npm 维护者和社区应该就这个话题进行认真的对话。 可能会开始思考 JavaScript 和 npm 如何融入Bytecode Alliance 之类的东西。

此页面是否有帮助?
0 / 5 - 0 等级