name: dependency-audit description: 使用 npm audit、pip-audit 或类似工具分析项目依赖的已知安全漏洞。用于审计包、检查CVE或更新易受攻击的依赖。
依赖性审计
快速开始
根据项目类型审计依赖:
# Node.js
npm audit
# Python
pip-audit
# Go
govulncheck ./...
指令
步骤 1:识别包管理器
检查清单文件:
package.json/package-lock.json→ npm/yarnrequirements.txt/pyproject.toml→ pipgo.mod→ Go 模块Cargo.toml→ Cargo (Rust)Gemfile→ Bundler (Ruby)
步骤 2:运行审计
Node.js (npm):
npm audit
npm audit --json # 机器可读输出
Node.js (yarn):
yarn audit
yarn audit --json
Python:
pip install pip-audit
pip-audit
pip-audit -r requirements.txt
Go:
govulncheck ./...
Ruby:
bundle audit check --update
步骤 3:分析结果
按严重性分类:
| 严重性 | CVSS | 行动 |
|---|---|---|
| 严重 | 9.0+ | 立即更新 |
| 高 | 7.0-8.9 | 24小时内更新 |
| 中等 | 4.0-6.9 | 本冲刺内更新 |
| 低 | < 4.0 | 方便时更新 |
步骤 4:修复漏洞
npm - 自动修复:
npm audit fix
npm audit fix --force # 允许破坏性更改
npm - 手动更新:
npm update vulnerable-package
# 或指定版本
npm install vulnerable-package@2.0.0
Python - 更新包:
pip install --upgrade vulnerable-package
# 或在 requirements.txt 中固定安全版本
vulnerable-package>=2.0.0
步骤 5:验证修复
重新运行审计以确认:
npm audit # 应显示 0 个漏洞
pip-audit # 应显示无问题
常见场景
传递性依赖
当漏洞位于子依赖中时:
# 检查依赖树
npm ls vulnerable-package
# 强制解决 (npm)
# 添加到 package.json:
{
"overrides": {
"vulnerable-package": "2.0.0"
}
}
无修复可用
当不存在修复版本时:
- 检查漏洞是否影响你的使用
- 考虑替代包
- 如可能,实施变通办法
- 监控更新
破坏性更改
当修复需要主要版本升级时:
- 查看变更日志以了解破坏性更改
- 更新代码以适应更改
- 彻底运行测试
- 考虑逐步推出
报告格式
## 依赖性审计报告
**项目:** my-app
**日期:** 2024-01-15
**总依赖:** 245
**发现漏洞:** 3
### 严重 (1)
**lodash** - 原型污染
- 已安装: 4.17.15
- 修复于: 4.17.21
- CVE: CVE-2021-23337
- 修复: `npm install lodash@4.17.21`
### 高 (1)
**axios** - SSRF 漏洞
- 已安装: 0.21.0
- 修复于: 0.21.2
- CVE: CVE-2021-3749
- 修复: `npm install axios@0.21.2`
### 中等 (1)
**minimist** - 原型污染
- 已安装: 1.2.5
- 修复于: 1.2.6
- CVE: CVE-2021-44906
- 修复: `npm audit fix`
CI/CD 集成
GitHub Actions
- name: 审计依赖
run: |
npm audit --audit-level=high
# 如果发现高或严重漏洞,则失败
Pre-commit
# package.json 脚本
{
"scripts": {
"precommit": "npm audit --audit-level=moderate"
}
}