Edurd987/devops-scanner-core

GitHub: Edurd987/devops-scanner-core

轻量级命令行依赖扫描器,通过解析多语言项目清单并对接 OSV.dev 漏洞数据库,检测已知漏洞、许可证风险和技术债务并生成综合风险评分。

Stars: 0 | Forks: 0

# Dependency Scanner — 核心 扫描项目清单中的已知漏洞(通过 [OSV.dev](https://osv.dev))、许可证风险和维护信号,并生成综合风险评分。 这是一个商业 SCA 服务的开源核心(采用 MIT 许可证)。 ## 支持的生态系统 | 生态系统 | 清单文件 | 状态 | |---|---|---| | Python | `requirements.txt`, `poetry.lock`, `pyproject.toml` | **生产可用** — 已在真实项目中验证 | | Node.js | `package.json`, `package-lock.json` | **生产可用** — 已在真实项目中验证 | | Go | `go.mod` | **生产可用** — 已在真实项目中验证 | | Java | `pom.xml` | 实验性 — **已禁用**(见下文) | | Rust | `Cargo.toml` | 实验性 — **已禁用**(见下文) | | Ruby | `Gemfile.lock` | 实验性 | **为什么禁用 Java/Rust:** 针对真实清单(`apache/commons-lang`、`BurntSushi/ripgrep`)进行的压力测试表明,Maven 解析器会将多个 `` 块合并为单个条目 —— 包名中包含了原始的 XML,且版本号在不同包之间发生了混淆。将其发送到漏洞数据库会产生错误的结果,这还不如没有结果。Rust 的内联表(`dep = { version = "1.0", path = "..." }`)解析不完整。在彻底修复之前,这两个解析器都将返回空结果。 ## 设计原则 **结果具有确定性。** 每次扫描仅发送一个 OSV `querybatch` 请求;网络错误会直接抛出,而不是被静默吞没。运行相同的扫描三次会返回相同的数值 —— 这是用于审计的必要条件。 **仅对可验证的事实进行扣分。** 数据缺失并不代表风险。未知的许可证、版本启发式推断以及仅仅存在传递性依赖等情况,都会作为*观察结果*报告,绝不会用于夸大评分。评分来源于真实的 CVE、Copyleft 许可证、未锁定的版本范围以及确认已过时的包。 ## 用法 ``` git clone https://github.com/Edurd987/devops-scanner-core.git cd devops-scanner-core # 扫描目录(仅限声明的 dependencies,无网络) python dependency_scanner.py /path/to/project # 包含来自 OSV.dev 的漏洞数据 python dependency_scanner.py /path/to/project --osv # 其他格式与过滤器 python dependency_scanner.py /path/to/project --osv -f json python dependency_scanner.py /path/to/project --ecosystem npm --severity high ``` 需要 Python 3.10+。无第三方依赖。 ## 范围与限制 - 分析**已声明**的依赖项。带有范围(`>=2.11.0`)的清单会作为范围进行匹配,因此某些发现可能不适用于实际安装的版本。Lock 文件可提供精确结果。 - 许可证检测目前依赖于一个内置的小型映射表;大多数包会被解析为 `Unknown`。计划实现基于注册中心的许可证信息扩充。 - 无可达性分析 —— 每个已知的 CVE 都会被报告,不会根据是否实际使用了易受攻击的代码路径进行过滤。 ## 商业版本 CycloneDX SBOM 导出、Web 仪表板、扫描历史记录、经过身份验证的 API 以及可审计的报告都是托管服务的一部分,不包含在此代码库中。 ## 许可证 MIT — 见 [许可证](LICENSE)。
标签:SCA工具, WebSocket, 云安全监控, 依赖分析, 合规风险, 文档结构分析, 逆向工具, 静态分析