npm 的 supply chain 安全机制有哪些?
1. 可信发布(Trusted Publishing)
- 2025 年 7 月正式可用,通过 OIDC 协议让 CI/CD 流水线使用短期凭证发布包
- 支持 GitHub Actions、GitLab CI/CD、CircleCI 等云托管运行环境
- 消除长期有效的 npm token,即使凭证泄露也无法在非授权环境中发布
2. 来源证明(Provenance)
- 基于 Sigstore 框架生成加密签名的来源证明
- 公开记录包的构建环境、源代码提交与发布流程,可供消费者验证
- 当包来自 GitHub Actions 或 GitLab CI/CD 的可信发布时,npm 自动生成来源证明
3. 细粒度访问令牌与双因素认证
- 细粒度访问令牌(Granular Access Token)可限定为单个包、只读权限或短期有效期(最短 7 天)
- npm 对高影响力包的维护者强制启用双因素认证(2FA)
- 支持 WebAuthn 替代传统的 TOTP,提升账户恢复安全性
4. 发布访问控制与最小发布年龄
- 支持 staged publishing:CI 提交包到暂存区,维护者通过 2FA 审核后再发布
- min-release-age 配置可拒绝发布少于指定天数的包,降低 typosquatting 风险
- 注册中心持续监控异常发布行为,如 2025 年 9 月的 self-replicating worm 事件后加强了 token 吊销机制