nmandic78/osv_scanner
GitHub: nmandic78/osv_scanner
一个单文件Web工具,用于审计项目依赖的安全漏洞、许可证合规性和供应链健康状况。
Stars: 0 | Forks: 0
# 依赖安全审计
一个单文件Web工具,用于审计Python或npm/Node项目的依赖项,检查已知漏洞、许可证合规性和供应链健康状况。无需安装、无需后端、无需API密钥。在浏览器中打开一个HTML文件,放入依赖文件,即可在仪表板中查看结果。

## 功能
- **漏洞扫描。** 每个软件包都会根据 OSV.dev 数据库进行检查。每个发现都会显示公告 ID (GHSA / CVE / PYSEC)、CVSS 3.x 严重性、受影响的版本范围、修复版本以及参考链接。
- **许可证合规性。** 每个软件包的许可证都会被解析并根据可编辑的商业友好许可证策略进行检查。任何超出策略范围的都会被标记。
- **供应链健康状况。** 每个软件包有一个0到100的健康评分,当已知源代码仓库时,还包含来自 deps.dev 的 OpenSSF Scorecard 细分。
- **支持 Python 和 npm。** 支持 `requirements.txt`、`pyproject.toml`、`poetry.lock`、`uv.lock`、`package.json`、`package-lock.json` 和 `yarn.lock`。格式和生态系统会自动检测。涵盖 React 项目,因为 React 本质上就是 npm 软件包。
- **仪表板。** 包含摘要卡片、实时过滤(易受攻击、许可证、正常、错误)、按风险或健康排序,以及每个软件包的详细视图。
- **JSON 报告导出**,用于分享或存档审计结果。
- **完全在浏览器中运行。** 一个自包含的HTML文件,无服务器、无构建步骤、无依赖。
## 快速开始
1. 下载 `dependency-security-audit.html`(或克隆此仓库)。
2. 在任何现代浏览器中打开它。无需安装任何东西。
3. 可选:在策略字段中调整批准的许可证列表。
4. 将您的依赖文件拖放到页面上,或粘贴其内容。
5. 点击 **扫描依赖项**。
**加载示例** 按钮可循环显示示例 Python 文件和示例 npm 文件。
## 支持的文件
### Python
| 文件 | 说明 |
| --- | --- |
| `requirements.txt`, `requirements-*.txt` | 标准 pip 格式。支持 `==`、`>=`、`~=`、额外依赖、环境标记和注释。 |
| `pyproject.toml` | PEP 621 `dependencies` 和 `optional-dependencies`,PEP 735 `dependency-groups`,以及 Poetry 依赖表。不包括构建系统要求。 |
| `poetry.lock` | 精确的已解析版本。 |
| `uv.lock` | 精确的已解析版本。 |
### npm / Node
| 文件 | 说明 |
| --- | --- |
| `package.json` | 直接 `dependencies`、`devDependencies`、`optionalDependencies` 和 `peerDependencies`。跳过本地和工作区依赖。 |
| `package-lock.json`, `npm-shrinkwrap.json` | 仅直接依赖项,使用其精确的锁定版本。不扫描传递依赖项(参见说明)。 |
| `yarn.lock` | Classic (v1) 和 Berry (v2+)。包含完整的已解析依赖树。 |
格式和生态系统是从文件内容检测的,因此上传和粘贴两种方式都适用。
## 检查内容
### 安全性
对于每个软件包,工具会查询 [OSV.dev](https://osv.dev),该服务聚合了 GitHub Advisory Database、PySEC 和其他公告来源。当发布 CVSS 向量时,会从中计算严重性(严重 9.0+、高 7.0 至 8.9、中 4.0 至 6.9、低 低于 4.0),否则回退到公告的定性评级。
### 许可证
软件包的许可证从注册表的 SPDX 许可证表达式、分类器或许可证文本中解析,然后与您的策略进行比较。每个软件包会得到以下三种结果之一:
- **已批准**:许可证在您的策略列表中。
- **待审核**:具有许可性但不在您的列表中,或者许可证无法验证。
- **已标记**:Copyleft(GPL、AGPL、LGPL、MPL)或商业使用受限(专有、SSPL、CC 非商业)。
许可证策略是一个可编辑的字段,预填了常见的商业友好许可证(MIT、Apache-2.0、BSD-3-Clause、0BSD、BSD、Zlib、CC0-1.0、BSD-2-Clause、ISC、Python-2.0、Unlicense、HPND、BSL-1.0)。编辑它会立即重新评估每个软件包,无需重新扫描。
### 健康状况
每个软件包有一个0到100的综合评分,主要受漏洞影响,并辅以发布时效、已撤回或弃用的发布版本、固定版本落后于最新版本的程度,以及可用时来自 deps.dev 的 OpenSSF Scorecard 总体评分。许可证状态单独报告,不影响健康评分。
## 数据来源
| 来源 | 用途 |
| --- | --- |
| [OSV.dev](https://osv.dev) | 已知漏洞(Python 和 npm) |
| [deps.dev](https://deps.dev) | OpenSSF Scorecard 和仓库信号 |
| [PyPI JSON API](https://pypi.org) | Python 版本、许可证元数据、发布日期 |
| [npm registry](https://registry.npmjs.org) | npm 版本、许可证元数据、弃用状态 |
这些都是允许跨域浏览器请求的公共服务,这使得无需后端的工具成为可能。
## 隐私
该工具没有后端。您的依赖文件在浏览器中解析,绝不会作为文件上传到任何地方。
然而,为了查询每个软件包,工具会将软件包名称和版本作为查询发送到公共服务:PyPI 或 npm registry、OSV.dev 和 deps.dev。如果您的项目包含私有或内部软件包名称,这些名称将出现在对这些服务的请求中。不存储任何数据,没有跟踪或分析,不使用 API 密钥。扫描结果和导出的 JSON 报告保留在您的机器上。
## 说明与限制
- **Snyk。** 浏览器页面无法直接读取 Snyk 公告页面(无跨域访问权限,且 Snyk API 需要令牌)。该工具使用 OSV.dev,它来源于为大多数扫描器提供数据的相同核心公告数据库,并为每个软件包链接到其 Snyk 公告页面,以便您进行交叉核对。
- **npm 传递依赖。** `package.json` 和 `package-lock.json` 仅扫描**直接依赖项**。典型的 npm 锁文件会解析出上千个传递软件包,使用实时 API 调用全部审计既慢又对公共 API 负担重。`yarn.lock` 没有记录哪些是直接软件包,因此会完整扫描。为保持响应性,任何超过150个软件包的扫描都会先显示确认提示,可选择扫描前150个或继续扫描全部。
- **锁文件与清单文件。** 锁文件(`*.lock`、`package-lock.json`)和完全固定的 `requirements.txt` 文件给出精确结果,因为每个软件包只有一个已解析版本。清单范围(`pyproject.toml`、`package.json` 中类似 `^1.2.0` 的条目)没有单一版本,因此工具评估最新发布版本并将这些行标记为“假设”。要准确审计实际安装的内容,请扫描锁文件。
- **通用 BSD。** 许可证检测优先使用注册表的 SPDX 许可证表达式。仅暴露通用“BSD License”分类器的旧软件包无法解析为特定子句变体,因此它们报告为通用标识符 `BSD`。默认策略包含 `BSD`,因此它们通过。如果您的策略需要精确的 `BSD-3-Clause` 标识符,请移除它。
- **私有软件包。** 未在 PyPI 或 npm registry 上发布的软件包显示为“未找到”,无可用公共数据。
- **覆盖范围。** OSV 持续更新,但“无已知 CVE”的结果反映的是扫描时刻的数据库,并非绝对保证。该工具覆盖 Python (PyPI) 和 npm 生态系统。
## 工作原理
该页面是纯客户端的 HTML、CSS 和 JavaScript,位于单个文件中。它检测文件格式和生态系统,解析依赖文件,为每个软件包解析一个版本,然后对数据源 API 运行并发查询,并随着结果返回逐步渲染。
## 浏览器支持
Chrome、Edge、Firefox 或 Safari 的任何当前版本。该页面使用 Fetch API 和现代 JavaScript。
## 开发
该项目是一个自包含的单文件。要修改它,直接编辑 `dependency-security-audit.html`。没有构建步骤、没有依赖、没有包管理器。运行时唯一的外部请求是上面列出的数据源 API 和网络字体。
## 许可证
本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。
标签:npm依赖分析, OpenSSF Scorecard, OSV数据库, Python依赖分析, 依赖安全审计, 依赖项管理, 健康评分, 单文件应用, 后端开发, 多模态安全, 安全仪表板, 安全合规检查, 安全审计工具, 开源安全工具, 数据可视化, 浏览器工具, 自动格式检测, 许可证合规, 软件组成分析, 逆向工程平台