用途
该技能旨在为 Node.js 开发提供 npm 包安全方面的专家指导,重点防止供应链攻击并加固包管理器配置。它面向需要管理依赖安全的开发者、维护者和 CI/CD 流程设计者。
主要能力
资料中覆盖的 npm 生态供应链攻击类型包括:Shai-Hulud 攻击(通过被入侵包进行蠕虫式传播)、Nx 事件(postinstall 脚本中的恶意代码)、event-stream 攻击(通过生命周期脚本进行长期数据外泄)、依赖混淆(攻击者以内部名称发布恶意包)。技能提供覆盖 npm、pnpm 和 Bun 的配置、工具与实践来缓解这些风险。
使用方式
默认安全配置
npm(.npmrc)可在项目根目录或全局配置(~/.npmrc)中设置:
# Disable all lifecycle scripts (postinstall, preinstall, etc.)
ignore-scripts=true
# Block git-based dependencies (git+ssh://, git+https://, etc.)
allow-git=none
# Only install packages that have been published for at least 30 days
min-release-age=30
也可全局应用:
npm config set ignore-scripts true
npm config set allow-git none
npm config set min-release-age 30
pnpm(pnpm-workspace.yaml)示例配置包含:minimumReleaseAge: 43200(阻止 30 天内的新包)、trustPolicy: no-downgrade(拒绝信任信号回退的版本,pnpm 10.21+)、allowBuilds 构建脚本允许列表、strictDepBuilds: true、blockExoticSubdeps: true,以及可选的 trustPolicyIgnoreAfter 和 trustPolicyExclude。
Bun 默认禁用 postinstall 脚本,可通过 package.json 中的 trustedDependencies 允许特定包运行。
安装命令
npm 安全安装示例:
# Install with security flags
npm install --ignore-scripts --allow-git=none
# Use npm ci for reproducible installs (CI/CD)
npm ci --ignore-scripts
# Install specific package securely
npm install lodash --ignore-scripts --allow-git=none
pnpm 安装与审查:
pnpm install
pnpm install --loglevel=verbose
pnpm install --ignore-trust-policy
选择性脚本执行
可使用 @lavamoat/allow-scripts 进行细粒度控制,通过 npx allow-scripts setup 创建允许列表,并在 package.json 的 lavamoat.allowScripts 中配置。
npx 执行加固
示例包括:npx --no-install、使用具体版本避免域名抢注、运行前用 npm view 验证包。
安全工具集成
- npq:
npm install -g npq,使用npq install与npq check。 - Socket Firewall(sfw):
npm install -g @socketsecurity/cli,使用npx @socketsecurity/cli npm install、audit、info。 - Snyk:
npm install -g snyk,snyk auth、snyk test、snyk monitor、snyk code test。
自动依赖更新与冷却期
提供 Renovate Bot 的 renovate.json 示例(minimumReleaseAge: "30 days"、stabilityDays: 30 等)和 Dependabot 的 .github/dependabot.yml 示例,并说明 Dependabot 原生不支持 minimumReleaseAge,可结合分支保护与 GitHub Actions 冷却检查。
锁文件安全
包括审查 package-lock.json 变更、npm audit、必要时重新生成锁文件,以及通过 .gitattributes 设置 merge=binary。
包健康评估与依赖混淆防护
提供 Snyk Advisor 查询、手动检查脚本示例(检查发布信息、维护者、许可证、脚本、依赖数量、provenance),以及通过 .npmrc 作用域注册表与 package.json 名称作用域防止依赖混淆。
开发容器与环境变量安全
提供 .devcontainer/devcontainer.json 示例(设置 ignore-scripts、allow-git 与挂载 .npmrc),以及使用 dotenv-vault 加密 .env 的流程。
维护者最佳实践
包括启用 2FA(npm profile enable-2fa auth-and-writes)、使用 provenance 发布(npm publish --provenance)、GitHub Actions OIDC 发布工作流示例。
故障排查
涵盖脚本被阻止但包需要脚本、必须使用 git 依赖、冷却期阻止紧急安全修复、信任策略阻止合法包、安全扫描器误报等场景的处理方式。
CI/CD 集成
提供 GitHub Actions 安全工作流示例,包括 npm ci --ignore-scripts、npm audit --audit-level=moderate、Socket 审计与 Snyk 扫描。
适用场景
适用于 Node.js 项目的依赖安全管理、CI/CD 流程加固、包维护者发布流程安全,以及需要防范供应链攻击的团队。
限制
资料中未提供该技能的收费、价格、平台与效果等信息。部分配置项(如 min-release-age、trustPolicy)明确标注了版本要求(如 pnpm 10.21+、npm 9.5+)。