SuperAPI AI 工具集

npm-security-best-practices

安全与审计

查看项目

更新于 10-13 21:10

技能介绍

用途

该技能旨在为 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+)。