Pyscan 是一个用 Rust 编写的高并发漏洞扫描器。它能自动遍历你的 Python 项目,提取各种打包格式的依赖项,并通过一次异步批量请求,将它们与 开源漏洞 (OSV) 数据库进行交叉比对。
Pyscan 旨在解决传统 Python 安全工具的性能和内存瓶颈:
pip-audit 和 safety 等行业标准工具,可实现高达 5.25 倍的加速。Pyscan 的运行时基于 $O(\text{vulns})$ 时间复杂度模型,执行时间随发现的漏洞数量扩展,而不是 依赖项数量。uv.lock、requirements.txt、pyproject.toml(Poetry、Hatch、PDM、Flit)中解析并提取依赖项,或通过解析你的原始 .py 源代码动态提取。详情请阅读基准测试报告。
你可以通过 pipx、pip(编译后的 Python wheel)或 cargo(原生 Rust 二进制文件)安装 Pyscan:
# 通过 pipx(推荐)(注意 "-rs" 后缀)
pipx install pyscan-rs
# 通过 pip(注意 "-rs" 后缀)
pip install pyscan-rs
# 通过 Cargo
cargo install pyscan
只需在项目根目录运行 pyscan,或指定一个特定的源代码文件夹:
# 扫描当前目录
pyscan
# 扫描指定目录
pyscan -d path/to/src
如果存在多个源文件,Pyscan 会按以下优先级链提取依赖项:
bom.json、spdx.json)uv.lockrequirements.txtpyproject.toml.py)如果找到的依赖项没有严格锁定版本,Pyscan 会回退到查询 PyPI 以获取最新版本,但强烈建议遵循 PEP-508 语法。
Pyscan 需要 Rust 工具链 >= v1.70,并利用基于 reqwest 和 tokio 的异步网络来并行化 OSV 查询,最大化吞吐量。如果你对解析器和扫描器的结构感兴趣,请查看架构概述。
Pyscan 是一个高度优化的工具,但尚未在所有边缘情况下经过真实环境考验。它不能保证你的代码 100% 免受所有向量的攻击。我强烈建议采用分层安全方法,并配合 Dependabot、pip-audit 或 Trivy 等工具。欢迎提交 PR 和 issue!
我启动这个项目时还是个身无分文的高中生,现在我是个身无分文的大学生。如果 Pyscan 为你的 CI/CD 管道节省了宝贵的时间和内存,请考虑请我喝杯咖啡: