第三方依赖安全漏洞处理
场景
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 中,定期自动扫描。