📋 第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审计
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依赖审计 ✅

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自动化依赖扫描 ✅

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扫描自动漏洞检查每次PRnpm audit/Trivy
定期审计全量扫描+更新每周Dependabot
SBOM归档生成物料清单每次发布CycloneDX/Syft
许可证检查白名单验证每次PRlicense-checker
💡 依赖管理策略:新增依赖需审批、许可证白名单(MIT/Apache✅ GPL❌)、Dependabot自动更新安全补丁、每周npm audit。

🔧 SBOM生成与漏洞管理

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、社区动态,保持知识新鲜度。

🔗 相关课程链接

前置课程后续课程关联课程
前几课基础内容下一课深入内容跨领域综合应用
⚠️ 实验环境安全:本课所有命令请在隔离的实验环境中执行,避免在生产环境直接操作。备份重要数据后再进行任何修改操作。

📌 记住:理论+实践=真正的掌握。每个概念都要动手验证,每个命令都要理解原理。