JaydenYoonZK/package-reality-check
GitHub: JaydenYoonZK/package-reality-check
一个浏览器端的依赖包真实性校验工具,用于在安装前检测 AI 建议的 npm 和 PyPI 包是否存在、是否可疑或纯属幻觉。
Stars: 0 | Forks: 0
# 包真实性检查 👻
在安装前,将 AI 建议的依赖项与 npm 和 PyPI 进行核对。粘贴 `package.json`、`requirements.txt` 或带有导入的代码,找出哪些包是真实的,哪些是全新的高仿包,哪些完全是凭空捏造的。
**[打开在线工具](https://jaydenyoonzk.github.io/package-reality-check/)** 或 **[查看它在示例中捕获幽灵包的过程](https://jaydenyoonzk.github.io/package-reality-check/?demo)**。检查直接从您的浏览器对公共注册表进行。您的代码不会发送到其他任何地方。
## 为什么会有这个工具
代码助手会产生包名称幻觉。一项[对 576,000 个生成代码样本的 2024 年研究](https://arxiv.org/abs/2406.10279)发现,在超过 200,000 个不重复的虚构名称中,几乎五分之一的建议包根本不存在。由于模型会自我重复,相同的幽灵名称会一次又一次地出现,而攻击者已经开始注册这些名称并植入恶意 payload。安全社区将其称为 slopsquatting。
防御方法很简单但也有效:在安装前先查一下该包。这个工具可以一次性完成整个依赖列表的查询。
## 功能特性
- 解析 `package.json`(每个依赖字段)、`requirements.txt`(说明符、扩展项、环境标记)以及带有导入的原始 JS/TS 或 Python 源代码
- 跳过 Node 内置模块和 Python 标准库,包括在最近的 Python 版本中已移除的模块(例如 `telnetlib`)
- 直接从您的浏览器查询 npm 和 PyPI(这两个注册表都会发送 CORS 标头,因此没有任何代理会看到您的输入)
- 标记出不存在的包、过去 120 天内注册的包、下载量极低的包、已弃用的包,以及与数百个流行包拼写错误距离非常接近的名称
- 用通俗易懂的语言解释每一个判定结果,并提供指向注册表页面的链接
## 使用说明
无需安装:[jaydenyoonzk.github.io/package-reality-check](https://jaydenyoonzk.github.io/package-reality-check/)
在本地运行:
```
git clone https://github.com/JaydenYoonZK/package-reality-check.git
cd package-reality-check
npm run serve # http://localhost:8322
```
## 在您自己的项目中使用该引擎
解析、标准库过滤、拼写错误距离检查以及判定逻辑都位于一个无依赖的 ES 模块 [`docs/checker.js`](docs/checker.js) 中。网络调用是分离的,因此该模块可以在任何地方运行:
```
import { extract, verdict, registryUrls } from "./checker.js";
const { kind, deps } = extract(sourceOrManifestText);
// fetch registryUrls(dep.name, dep.ecosystem).api yourself, then:
const result = verdict(dep.name, dep.ecosystem, { exists, createdAt, downloads });
```
## 测试
```
npm test
```
15 个测试覆盖了清单解析、导入提取、标准库过滤、PEP 508 规范化、拼写错误距离以及每个判定路径。
## 需要了解的局限性
- 仅支持 npm 和 PyPI。其他生态系统正在 [issues](https://github.com/JaydenYoonZK/package-reality-check/issues) 中跟进。
- 内部/私有包将显示为 PHANTOM,因为该工具只能查看公共注册表。这也提醒您需要保护好这些名称。
- 编辑距离无法读取意图;偶尔出现的合法且名称相似的包需要您花三十秒时间自行判断。
## 许可证
MIT。由 [Jayden Yoon ZK](https://github.com/JaydenYoonZK) 构建和维护。姊妹项目:[AI Paste Cleaner](https://github.com/JaydenYoonZK/ai-paste-cleaner)。
**[打开在线工具](https://jaydenyoonzk.github.io/package-reality-check/)** 或 **[查看它在示例中捕获幽灵包的过程](https://jaydenyoonzk.github.io/package-reality-check/?demo)**。检查直接从您的浏览器对公共注册表进行。您的代码不会发送到其他任何地方。
## 为什么会有这个工具
代码助手会产生包名称幻觉。一项[对 576,000 个生成代码样本的 2024 年研究](https://arxiv.org/abs/2406.10279)发现,在超过 200,000 个不重复的虚构名称中,几乎五分之一的建议包根本不存在。由于模型会自我重复,相同的幽灵名称会一次又一次地出现,而攻击者已经开始注册这些名称并植入恶意 payload。安全社区将其称为 slopsquatting。
防御方法很简单但也有效:在安装前先查一下该包。这个工具可以一次性完成整个依赖列表的查询。
## 功能特性
- 解析 `package.json`(每个依赖字段)、`requirements.txt`(说明符、扩展项、环境标记)以及带有导入的原始 JS/TS 或 Python 源代码
- 跳过 Node 内置模块和 Python 标准库,包括在最近的 Python 版本中已移除的模块(例如 `telnetlib`)
- 直接从您的浏览器查询 npm 和 PyPI(这两个注册表都会发送 CORS 标头,因此没有任何代理会看到您的输入)
- 标记出不存在的包、过去 120 天内注册的包、下载量极低的包、已弃用的包,以及与数百个流行包拼写错误距离非常接近的名称
- 用通俗易懂的语言解释每一个判定结果,并提供指向注册表页面的链接
## 使用说明
无需安装:[jaydenyoonzk.github.io/package-reality-check](https://jaydenyoonzk.github.io/package-reality-check/)
在本地运行:
```
git clone https://github.com/JaydenYoonZK/package-reality-check.git
cd package-reality-check
npm run serve # http://localhost:8322
```
## 在您自己的项目中使用该引擎
解析、标准库过滤、拼写错误距离检查以及判定逻辑都位于一个无依赖的 ES 模块 [`docs/checker.js`](docs/checker.js) 中。网络调用是分离的,因此该模块可以在任何地方运行:
```
import { extract, verdict, registryUrls } from "./checker.js";
const { kind, deps } = extract(sourceOrManifestText);
// fetch registryUrls(dep.name, dep.ecosystem).api yourself, then:
const result = verdict(dep.name, dep.ecosystem, { exists, createdAt, downloads });
```
## 测试
```
npm test
```
15 个测试覆盖了清单解析、导入提取、标准库过滤、PEP 508 规范化、拼写错误距离以及每个判定路径。
## 需要了解的局限性
- 仅支持 npm 和 PyPI。其他生态系统正在 [issues](https://github.com/JaydenYoonZK/package-reality-check/issues) 中跟进。
- 内部/私有包将显示为 PHANTOM,因为该工具只能查看公共注册表。这也提醒您需要保护好这些名称。
- 编辑距离无法读取意图;偶尔出现的合法且名称相似的包需要您花三十秒时间自行判断。
## 许可证
MIT。由 [Jayden Yoon ZK](https://github.com/JaydenYoonZK) 构建和维护。姊妹项目:[AI Paste Cleaner](https://github.com/JaydenYoonZK/ai-paste-cleaner)。标签:AI代码安全, Web前端, 依赖安全, 域名收集, 多模态安全, 数据可视化, 自定义脚本