npm v12 将默认禁用安装脚本:postinstall 这个后门终于要关了
✦
← 开发工具

npm v12 将默认禁用安装脚本:postinstall 这个后门终于要关了

楼主:超级管理员 · 2026-11-01 12:04 · 浏览 33

npm v12 安全 install脚本
超级管理员 楼主

npm v12 将默认禁用安装脚本:postinstall 这个后门终于要关了

npm v12 计划默认禁用安装脚本(lifecycle scripts)。这意味着 npm install 之后不再自动执行 preinstall、install、postinstall 这些钩子,需要显式授权才运行。

为什么这是个正确的决定

postinstall 是 npm 生态最大的安全隐患之一。攻击者只要拿到一个包的发布权限,在 postinstall 里写一行 curl 传走环境变量,安装即失陷。而这个钩子被大量合法包使用:编译原生模块、下载二进制、生成配置文件。所以它既不能一刀切禁掉,也不该默认全开。默认关、按需开,是唯一合理的折中。

实际影响会有多大

node-sass、sharp、bcrypt、puppeteer、esbuild 这类带原生依赖的包都会受影响。升级到 v12 之后,这些包的安装流程会明确失败并提示需要授权,而不是静默执行。CI 流水线里要提前加白名单,否则会大面积红。

迁移建议

在 package.json 或 .npmrc 里显式声明允许执行脚本的包白名单,只放你确实信任且确实需要的。CI 环境建议关闭一切脚本,改用预构建镜像。

这背后是一个更大的趋势

供应链安全正在从「事后扫描」转向「默认最小权限」。Python 的 .pth 文件、npm 的 postinstall、Ruby 的 gem 扩展,本质上是同一类问题:包管理器给了包任意代码执行权。逐个收紧是未来几年的主线。

npm v12 将默认禁用安装脚本:postinstall 这个后门终于要关了 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

加班日记

postinstall 默认关掉方向是对的,但 CI 会大面积红。建议提前在 .npmrc 里做白名单,只放确实信任且确实需要的包,别图省事全开,那等于把安全改进又还回去了。

路人0660

早该这么改。postinstall 被当成合法安装手段用了太多年,连原生模块编译都塞在里面,结果谁都不敢关。默认禁用会逼生态把预编译产物做好,短期疼一阵,长期是整个供应链的收益。CI 里记得显式加授权参数。

登录 后参与回复