跳到主要内容

第三方依赖安全漏洞处理

场景

npm audit 报告项目中的某个依赖存在高危漏洞,或收到安全团队通报某个包存在漏洞。怎么处理?

处理流程

第一步:评估影响

# 查看漏洞详情
npm audit

# 只看高危和严重
npm audit --audit-level=high

评估维度:

  • 严重等级:Critical > High > Moderate > Low
  • 是否可达:漏洞代码在你的项目中是否真的被执行到?
  • 直接/间接依赖:直接依赖可以直接升级;间接依赖可能需要等上游修复

第二步:修复方案

场景方案
有新版本修复了直接升级 npm update / pnpm update
是间接依赖overrides(npm)/ resolutions(yarn)/ pnpm.overrides 强制版本
上游未修复评估是否可以换一个替代库
暂时无法修复patch-package 临时打补丁 + 记录到技术债
package.json — 强制覆盖间接依赖版本
{
"pnpm": {
"overrides": {
"vulnerable-package": ">=2.0.1"
}
}
}
patch-package 临时修复
# 1. 修改 node_modules 中的代码
# 2. 生成补丁
npx patch-package vulnerable-package

# 3. 补丁文件会生成在 patches/ 目录,提交到 Git
# 4. postinstall 自动应用

CI 中自动检测

.github/workflows/audit.yml
name: Security Audit
on:
schedule:
- cron: '0 9 * * 1' # 每周一检查
push:
paths: ['pnpm-lock.yaml']
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pnpm audit --audit-level=high

常见面试问题

Q1: npm audit 报了漏洞怎么办?

答案

先评估影响范围和漏洞是否可达,再选择升级、强制覆盖版本、替换库或临时 patch。将安全检查集成到 CI 中,定期自动扫描。

相关链接