safety check 最快扫描已安装包漏洞,但仅检查显式依赖;pip-audit 由 pypa 支持,可递归检测子依赖且基于 osv 数据库,更适合 ci/cd;修复需最小必要升级并锁定漏洞库版本。

用 safety 扫描已安装包的已知漏洞
直接运行 safety check 是最快速的方式,它会读取当前环境的 pip list --outdated 和 pip freeze 输出,比对 pyup.io 的开源漏洞数据库(如 safety-db)。注意:默认不扫描间接依赖(即子依赖),只扫 pip freeze 显式列出的包。
常见错误是没激活目标虚拟环境就执行,结果扫了系统 Python 或其他环境。务必先确认:which python 和 pip list | head -3 输出是否符合预期。
- 基础扫描:
safety check -r requirements.txt(推荐从文件扫描,更可控) - 扫描当前环境所有包:
safety check(需提前pip install safety) - 忽略低危漏洞(避免噪音):
safety check --ignore 42151,39820(ID 来自报告中的id字段) - 输出 JSON 便于脚本解析:
safety check --output json
为什么 pip-audit 比 safety 更适合 CI/CD 场景
pip-audit 由 PyPA 官方支持,底层调用 pip-api 解析依赖树,能递归检测子依赖漏洞(比如 requests 依赖的 urllib3),而 safety 默认不深入这层。它的数据库来源是 OSV(Google 维护的通用开源漏洞库),覆盖范围更广,尤其对较新披露的 CVE 响应更快。
但要注意:pip-audit 不会自动修复,只报告;且首次运行会缓存漏洞数据(~/.cache/pip-audit),后续扫描快很多。
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
- 扫描当前环境:
pip-audit - 只检查指定包:
pip-audit -r requirements.txt --strict(--strict遇到任意漏洞就返回非零退出码,适合 CI 判断失败) - 跳过已知误报:
pip-audit --skip-editable(忽略本地开发态的-e .包)
修复漏洞时别盲目 pip install --upgrade
升级不一定安全——有些高危漏洞只在特定小版本修复,盲目升到最新版可能引入不兼容变更或新 bug。正确做法是查清漏洞影响的具体版本范围,再选一个**最小必要升级版本**。
例如 safety 报告:django 版本 存在 CVE-2023-31053。这时不该直接 <code>pip install Django --upgrade(可能升到 4.x),而应明确指定:pip install "Django>=3.2.20,。
- 优先用
pip install "pkg>=x.y.z"而非pip install pkg==x.y.z,保留后续小版本自动修复空间 - 修改
requirements.txt后,务必重新运行pip-audit -r requirements.txt验证是否真正修复 - 若某包长期不维护(如报告中出现
insecure and unmaintained),考虑替换为活跃替代品(如用httpx替代老旧的requestsfork)
CI 中集成检测却总被误报打断?关键在锁定数据库版本
两个工具的漏洞库都在持续更新,今天通过的扫描,明天可能因新录入一条 CVE 就失败。这不是误报,而是真实风险暴露——但会导致 CI 不稳定。解决方式不是关检测,而是**固定数据库快照**。
safety 支持 --db 参数加载本地 safety-db tarball;pip-audit 可用 --vex 加载 VEX(Vulnerability Exploitability Exchange)文件声明已评估项。更轻量的做法是:在 CI 中用 pip-audit --require-hashes + 配合 pinned requirements.txt,让每次扫描基于确定的依赖图。
- CI 脚本中加一句:
pip-audit --strict || { echo "Vulnerabilities found"; exit 1; } - 若团队接受某些低风险漏洞,用
--ignore显式列出 ID,并写明原因到注释里,避免遗忘 - 真正容易被忽略的是:Docker 构建时没重跑审计——基础镜像里的
pip包可能早已过期,必须在RUN pip install -r requirements.txt后立即跟RUN pip-audit -r requirements.txt --strict
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










