pip-audit是python官方安全工作组维护的轻量级依赖漏洞扫描工具,专用于检测已安装包或requirements.txt中声明的第三方包是否存在已知cve漏洞,不分析代码逻辑,需手动集成至vscode任务或ci流程。

VSCode 本身不内置 Python 依赖漏洞检查功能,必须靠第三方工具(如 safety、pip-audit 或 dependabot 集成)实现,且需手动配置终端命令或任务;直接点“安装”按钮或靠 Python 插件自动扫描是做不到的。
为什么 pip install 后 VSCode 不提示已知漏洞?
Python 插件(ms-python.python)默认只做语法检查、类型推导和 import 解析,pylint、flake8 等静态检查器也完全不涉及包版本安全性。漏洞检测属于依赖供应链层面,需要额外调用专用 CLI 工具扫描 requirements.txt 或已安装包。
- VSCode 的 “Problems” 面板不会显示
safety check报出的 CVE 信息,除非你把它包装成自定义 task 并解析输出 - 即使装了
safety,不主动运行safety check -r requirements.txt,它就永远沉默 -
pip-audit默认只检查当前环境已安装的包,对未安装但写在requirements.in里的包无感知
推荐用 pip-audit:比 safety 更准、更轻、原生支持 pip 22.2+
pip-audit 是 Python 官方安全工作组维护的工具,基于 PyPI 的 advisory-db,误报率低,且能定位到具体引入漏洞的依赖路径(比如 requests → urllib3 → cve-2023-43804)。
- 安装:
python -m pip install pip-audit(务必用python -m pip,避免装错环境) - 检查当前环境:
pip-audit(直接扫描 site-packages) - 检查 requirements.txt:
pip-audit -r requirements.txt - 生成 JSON 报告供 CI 使用:
pip-audit -r requirements.txt --format json > audit-report.json - 忽略某个 CVE(慎用):
pip-audit -r requirements.txt --ignore CVSS-2024-12345
如何让 VSCode 终端一键运行 pip-audit 并高亮结果?
不能靠插件自动触发,但可以配置为快捷键任务,让错误行点击跳转到对应 requirements.txt 行。
- 在项目根目录创建
.vscode/tasks.json,内容如下:
{
"version": "2.0.0",
"tasks": [
{
"label": "audit: check deps",
"type": "shell",
"command": "pip-audit -r requirements.txt 2>&1 || true",
"problemMatcher": {
"owner": "pip-audit",
"pattern": [
{
"regexp": "^\s*([^\s]+)\s+\(([^)]+)\)\s+via\s+(.+)$",
"file": 1,
"message": "vulnerable dependency: $1 ($2) via $3"
}
]
},
"group": "build",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": true
}
}
]
}
- 按
Ctrl+Shift+P→ 输入Tasks: Run Task→ 选audit: check deps - 若报告中出现带路径的警告(如
urllib3 (1.26.12) via requests),VSCode 会尝试把urllib3当作文件名匹配——这不是 bug,是 problemMatcher 匹配逻辑限制,实际使用时仍需人工核对requirements.txt中哪一行间接引入了它
别踩坑:pip freeze > requirements.txt + pip-audit = 假阳性泛滥
用 pip freeze > requirements.txt 生成的文件包含 pip、setuptools、wheel 甚至开发工具(如 black、isort),而 pip-audit 会对它们全部扫描——但这些工具的漏洞通常不影响运行时安全,反而制造干扰。
- 正确做法:用
pipreqs . --force生成最小生产依赖集,再 audit - 更稳妥做法:用
pip-tools管理——写requirements.in(只写顶层依赖),运行pip-compile requirements.in生成带精确版本号的requirements.txt,再 audit - 注意:如果
requirements.txt里有-e ./src或git+https这类非 PyPI 来源,pip-audit会跳过,不报错也不提醒
真正关键的不是“装上就完事”,而是把 pip-audit 嵌入保存文件或提交前的 pre-commit 钩子;VSCode 内的任务只是临时验证手段,漏掉一次手动执行,就等于放行一个已知漏洞。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











