📋 第30课:依赖审计
核心概念
依赖审计:供应链安全的守门人
90%的现代应用由开源组件构成。依赖审计确保每个第三方包都是安全的、有维护的、无已知漏洞的。
依赖审计工具链
语言 │ 锁文件 │ 审计工具 │ SBOM工具
─────────┼────────────────┼───────────────────┼─────────────
Node.js │ package-lock │ npm audit/Snyk │ CycloneDX
Python │ requirements │ pip audit/Safety │ cyclonedx-bom
Java │ pom.xml/gradle │ OWasp DepCheck │ CycloneDX
Go │ go.sum │ govulncheck │ syft
命令实操
1. npm依赖审计 ✅
npm audit
npm audit --audit-level=high
npm audit fix
npm audit fix --force
# 生成SBOM
npx @cyclonedx/cyclonedx-npm -o sbom.json
# Snyk深度扫描
npm install -g snyk
snyk auth
snyk test --severity-threshold=high
snyk monitor
# 安全策略
cat > .npmrc << 'EOF'
audit=true
audit-level=high
ignore-scripts=true
package-lock=true
EOF
2. Python依赖审计 ✅
pip install pip-audit safety cyclonedx-bom
pip-audit -r requirements.txt
pip-audit --desc
safety check -r requirements.txt
# 生成SBOM
cyclonedx-py requirements -i requirements.txt -o sbom.json
# Poetry
poetry show --outdated
3. CI自动化依赖扫描 ✅
cat > .github/workflows/dependency-scan.yml << 'EOF'
name: Dependency Audit
on:
schedule: [{cron: '0 6 * * 1'}] # 每周一
pull_request: {paths: ['package-lock.json', 'requirements.txt']}
jobs:
npm-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: {node-version: '20'}
- run: npm ci
- run: npm audit --audit-level=high
- run: npx @cyclonedx/cyclonedx-npm -o sbom.json
python-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: |
pip install pip-audit safety cyclonedx-bom
pip-audit -r requirements.txt
safety check -r requirements.txt
cyclonedx-py requirements -i requirements.txt -o sbom.json
EOF
架构图
依赖审计:供应链安全的守门人架构
┌──────────────────────────────────────────┐
│ 开发阶段 │
│ 依赖声明 → 锁文件 → npm audit/pip-audit │
└──────────────┬───────────────────────────┘
┌──────────────▼───────────────────────────┐
│ CI/CD阶段 │
│ Snyk/Trivy扫描 → SBOM生成 → 门禁检查 │
└──────────────┬───────────────────────────┘
┌──────────────▼───────────────────────────┐
│ 运行阶段 │
│ 持续监控 → Dependabot自动更新 → 告警 │
└──────────────────────────────────────────┘
故障排查
❌ npm audit修复失败
npm audit --json | jq '.metadata.vulnerabilities'
npm ls # 查看谁依赖它
# 在package.json添加overrides
{"overrides": {"lodash": "^4.17.21"}}
npm install
💡 依赖审计原则:每周自动扫描、SBOM归档、新增依赖需审批、许可证白名单管理。
🏆 成就解锁:依赖审计专家!
掌握npm audit/pip-audit/SBOM/CI扫描——供应链安全从依赖审计开始
📝 依赖审计流程
| 阶段 | 操作 | 频率 | 工具 |
| 新增依赖 | 安全+许可证审查 | 每次新增 | 人工+Snyk |
| CI扫描 | 自动漏洞检查 | 每次PR | npm audit/Trivy |
| 定期审计 | 全量扫描+更新 | 每周 | Dependabot |
| SBOM归档 | 生成物料清单 | 每次发布 | CycloneDX/Syft |
| 许可证检查 | 白名单验证 | 每次PR | license-checker |
💡 依赖管理策略:新增依赖需审批、许可证白名单(MIT/Apache✅ GPL❌)、Dependabot自动更新安全补丁、每周npm audit。
🔧 SBOM生成与漏洞管理
# 多语言SBOM生成
syft . -o cyclonedx-json > sbom.json
# 查看SBOM内容
jq '.components[] | {name, version, purl}' sbom.json
# SBOM漏洞扫描(Grype)
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
grype sbom:sbom.json --severity high,critical
# SBOM对比(发现新增依赖)
syft . -o cyclonedx-json > sbom-new.json
diff <(jq -r '.components[].name' sbom-old.json | sort) \
<(jq -r '.components[].name' sbom-new.json | sort)
# Dependabot自动更新(在GitHub中启用)
cat > .github/dependabot.yml << 'EOF'
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule: {interval: "weekly"}
open-pull-requests-limit: 10
reviewers: ["devops-team"]
- package-ecosystem: "pip"
directory: "/"
schedule: {interval: "weekly"}
EOF
📝 依赖生命周期管理
| 阶段 | 操作 | 工具 | 审批 |
| 引入 | 安全+许可证评估 | Snyk+license-checker | 安全委员会 |
| 维护 | 自动安全更新 | Dependabot | 自动合并低风险 |
| 更新 | 主版本升级评估 | 人工Review | 技术负责人 |
| 移除 | 无用依赖清理 | depcheck/npx dep | 开发自决 |
💡 依赖健康度指标:无CRITICAL CVE、活跃维护(6月内有commit)、许可证兼容、无deprecated警告。
⚠️ 学习建议:每课内容都需要在实验环境中实际操作验证,只有动手才能真正掌握。建议搭建自己的实验环境反复练习。
📝 本课知识图谱
| 知识域 | 核心技能 | 验证方式 |
| 核心概念 | 理解原理和架构 | 能用自己的话解释 |
| 命令实操 | 熟练使用相关工具 | 能独立完成操作 |
| 故障排查 | 定位和解决问题 | 能在模拟故障中恢复 |
| 最佳实践 | 遵循生产级标准 | 能设计可靠方案 |
💡 持续学习:技术领域更新快,关注官方博客、GitHub Release、社区动态,保持知识新鲜度。
🔗 相关课程链接
| 前置课程 | 后续课程 | 关联课程 |
| 前几课基础内容 | 下一课深入内容 | 跨领域综合应用 |
⚠️ 实验环境安全:本课所有命令请在隔离的实验环境中执行,避免在生产环境直接操作。备份重要数据后再进行任何修改操作。
📌 记住:理论+实践=真正的掌握。每个概念都要动手验证,每个命令都要理解原理。