Dependency Audit 是一个面向项目依赖的审计技能,主要用途是扫描依赖中的漏洞、检查过期包、验证许可证合规,并识别供应链风险。
主要能力
漏洞扫描:
- Node.js(npm/pnpm):可用 npm audit 查看摘要,用 npm audit --json 配合 jq 提取漏洞总数及严重级别,用 npm audit fix 在可能范围内自动修复;pnpm 可用 pnpm audit --json。
- Python:使用 pip-audit,可扫描已安装包、扫描 requirements 文件、输出 JSON,或用 pip-audit --fix 通过升级修复。
- Go:使用 govulncheck ./... 检查已知漏洞,-show verbose 可输出调用栈。
- Rust:使用 cargo audit,支持 JSON 输出;如未安装可用 cargo install cargo-audit。
过期包检查:
- Node.js 使用 npm outdated --json;pnpm 使用 pnpm outdated --format json。
- Python 使用 pip list --outdated --format json。
- Go 使用 go list -m -u all 并过滤带方括号的输出。
- Rust 使用 cargo outdated。
许可证合规:
- Node.js 可全局安装 license-checker,通过 JSON 输出查看各包许可证,用 --failOn "GPL-3.0;AGPL-3.0" 检查特定问题许可证,或用 --summary 按许可证类型汇总。
- Python 可安装 pip-licenses,输出 JSON 查看包与许可证,或用 --allow-only 限定允许的许可证列表(如 MIT、BSD-3-Clause、Apache-2.0、ISC)。
依赖树分析:
- Node.js 用 npm explain <package-name> 了解某包为何被引入,用 npm ls --all --json 查看完整树。
- Python 用 pip show <package-name> 查看 Requires 与 Required-by。
- Go 用 go mod graph 结合 grep 定位模块。
- Rust 用 cargo tree -p <crate-name>。
供应链检查:
- 可用 npm audit signatures 检查包来源(provenance)。
- 可对可疑包用 npm info 查看基本信息,辅助识别仿冒(typosquatting)。
- 可用 npm view <package-name> time --json 查看发布时间与下载量等线索。
使用方式
该技能以命令行操作为主,按语言生态选择对应工具并运行上述命令。文档建议在合并依赖更新之前执行审计,而不仅按固定周期运行。
适用场景与限制
适用于需要在开发流程中对依赖安全、版本陈旧度和许可证风险进行审查的团队或个人。需注意:npm audit fix --force 可能引入破坏性变更,运行前应审查;许可证合规对商业软件重要,依赖中出现 GPL/AGPL 可能要求开源自身代码;零日漏洞不会出现在审计结果中,因此应尽量精简依赖;生产环境建议固定精确版本(如 package-lock.json、使用 == 的 requirements.txt)。
工具安装、各命令的具体参数含义及输出解读,资料中已有部分示例;未提及的平台、收费模式或图形界面等信息暂未提供。