ohaswin/pyscan

GitHub: ohaswin/pyscan

用 Rust 编写的高性能 Python 依赖漏洞扫描器,通过异步查询 OSV 数据库快速发现项目中的已知漏洞并定位风险代码。

Stars: 210 | Forks: 7

Pyscan

CI License PyPI Crates.io Crates.io Downloads PyPI Downloads

Pyscan Performance Benchmark

Pyscan 是一个使用 Rust 编写的高度并发漏洞扫描器。它能自动遍历你的 Python 项目,提取各种打包格式的依赖项,并在一次异步批量请求中将它们与 开源漏洞 (OSV) 数据库进行交叉比对。

Pyscan 的诞生旨在解决传统基于 Python 的安全工具在性能和内存方面的瓶颈: - **性能提升:** 在中大型数据集上,相比 `pip-audit` 和 `safety` 等行业标准工具,可实现高达 **5.25 倍的加速**。Pyscan 的运行时采用 $O(\text{vulns})$ 时间复杂度模型,执行时间随发现的漏洞数量变化,而**不是**你拥有的依赖项数量。 - **平稳的内存占用:** 无论你是扫描 15 个依赖项还是 700 多个依赖项,Pyscan 的内存使用量始终保持平稳(约 45MB)。对于内存受限的 CI/CD 流水线来说非常稳健。 - **通用支持:** 自动解析并提取来自 SBOM(**CycloneDX**、**SPDX**)、`uv.lock`、`requirements.txt`、`pyproject.toml`(Poetry、Hatch、PDM、Flit)的依赖项,或通过动态解析原始 `.py` 源代码来获取。 - **可达性分析:** Pyscan 超越了静态清单解析。它使用启发式算法扫描你的源代码,精确定位并高亮显示导入了存在漏洞依赖项的代码位置,为修复工作提供即时上下文。 请在 [基准测试报告](BENCHMARKS.md) 中阅读深入了解。 ## 安装 你可以通过 `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 将按照以下优先级链提取依赖项: 1. SBOMs (`bom.json`, `spdx.json`) 2. `uv.lock` 3. `requirements.txt` 4. `pyproject.toml` 5. 原始源代码 (`.py`) *如果在发现某个依赖项时没有严格锁定的版本号,Pyscan 将退而查询 PyPI 以获取最新版本,不过强烈建议遵循 PEP-508 语法。* ## 构建与架构 Pyscan 需要 `>= v1.70` 的 Rust 工具链,并利用通过 `reqwest` 和 `tokio` 实现的异步网络来并行化 OSV 查询以实现最大化吞吐量。如果你对解析器和扫描器的结构感兴趣,请查看[架构概述](./architecture/)。 ## 免责声明 Pyscan 是一款高度优化的工具,但尚未在所有边缘情况下都经过实战检验。它不能保证你的代码在所有攻击向量下 100% 安全。我强烈建议采用分层安全策略,并结合 Dependabot、`pip-audit` 或 Trivy 等工具使用。非常欢迎提交 PR 和 issue! ## 路线图(截至 2026 年 4 月) - [x] 添加 cyclonedx 和 SPDX SBOM 支持。 - [ ] 项目安全态势的持久化状态表示。 - [ ] 传递依赖的可视化 DAG(有向无环图)分析。 - [ ] 改进深层嵌套导入的可达性分析。 ## 捐赠 我在还是一个穷困潦倒的高中生时就开始了这个项目,现在我成了一个穷困潦倒的大学生。如果 Pyscan 为你的 CI/CD 流水线节省了宝贵的时间和内存,请考虑请我喝杯咖啡: [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/Z8Z74DCR4)
标签:Cargo, CI/CD安全, Llama, OSV数据库, pip-audit替代, PyPI, Python依赖扫描, Rust语言, SCA工具, 云安全监控, 低内存占用, 依赖管理, 加密, 可视化界面, 子域名暴力破解, 安全合规, 开源漏洞, 异步请求, 批量测试, 漏洞扫描器, 网络代理, 自动化检测, 跨平台工具, 逆向工具, 通知系统, 静态分析