matthewdeanmartin/skip_trace
GitHub: matthewdeanmartin/skip_trace
一款用于探查 Python 依赖包所有者与维护者联系的安全工具。
Stars: 2 | Forks: 0
# skip_trace
## 谁拥有你的依赖
- 它们能否与现实世界中的个人或公司关联
- 能否联系到他们
当然,所有包都有一个 PyPI 用户。用户的列表并非学术性的,你关心他们是因为你想:
与它们沟通。
[
](https://github.com/matthewdeanmartin/skip_trace/actions/workflows/tests.yml)
[
](https://results.pre-commit.ci/latest/github/matthewdeanmartin/skip_trace/main)
[](https://pypistats.org/packages/skip-trace)
[

](https://pypi.org/project/skip-trace/)
## 安装
**需要**
- GitHub 密钥
- 初始化 `spacy`
- `git clone`,`uv sync`
- 或 `python -m spacy download en_core_web_sm`
- 或 `python -c 'import spacy.cli; spacy.cli.download("en_core_web_sm")'`
- (尚未实现)Openrouter/OpenAI 密钥
## 用法
```
skip-trace who-owns requests
```
你将看到的是所有者表和维护者表。
所有者表包含了我能找到的所有姓名、电子邮件地址和自定义域名。
## 使用场景
- 你担心供应链攻击,并担心某个包实际上由受朝鲜政府支持的黑客维护
- 你需要提交错误报告,但找不到问题链接
- 你想雇佣、维护者购买东西,或向维护者慈善捐赠
- 你想进行 [PEP 541 接管](https://peps.python.org/pep-0541/)
- 你想志愿接管一个被遗弃的包,而不是分叉它
- 你想弄清楚你的项目是否已无法访问。如果你足够认真地对自己
的包运行此工具,你可能不是那种严格避免添加联系信息的人。
- 你试图匿名发布并想检查该包是否真的匿名
## 不可达
参见 [PEP 541](https://peps.python.org/pep-0541/) 获取确切文本
- 你的元数据中是否有真实的电子邮件地址
- 你是否有链接到包含你的真实电子邮件地址或其他联系方式的页面
## 名称抢占
如果一个包占用了好名字但用户没有对其发布任何内容,这就是名称抢占。
此外,如果名称与另一个相似且具有恶意性。
## 账户所有权演变
上传第一个包的人是否上传了下一个?这个问题很难,不要指望这个工具能帮你解答。
这是分叉吗?你会看到混合的身份,来自新发布者和旧发布者。
## 非协调反向链接逻辑
存在 `` 语法,除非网站允许你添加该 `rel`,或者你拥有一个你完全控制的定制域名网站,否则你无法使用许多网站作为 `rel` 反向链接。
如果 PyPI 上的链接指向一个外部网站,而该网站又有一个链接直接回到 PyPI 的同一页面,那么:
- 两者由同一人控制,例如 LinkedIn/Twitter/Mastodon 的个人资料部分。
- 你可以依靠对 LinkedIn 的信任来确认 John Doe
- 另一个是定制域名主页。
- 另一个网站具有任意用户内容,例如博客评论。
- 另一个网站是索引、镜像或搜索引擎。
攻击场景
- 另一个网站属于第三方,但第三方添加了反向链接。
- 例如,PyPI 的 README 引用了一篇博客文章(朋友引用,而非“me”引用),该文章的作者随后添加了反向链接,现在看起来像是“me”引用。
缓解措施
- 某人必须查看非协调链接,并判断每个链接是否表示“此链接指向我的身份”。
- PyPI 上的链接(在元数据中)
- 源代码托管站点。好迹象,可能还有加密证据。
- 库信息站点。不意味着太多。
- 文档站点。表示作者控制了两个站点。有助于追踪账户所有权演变或分叉。
## 架构
收集大量信息
- PyPI
- 通过 API 获取元数据
- 包元数据和包内容
- (计划中)Sigstore 加密签名信息
- 源代码仓库
- 如果可以找到 GitHub 仓库,它可能包含比包更多的文件
- 对找到的 URL 进行爬取
- 以查找反向链接
- 以查找名称,通过命名实体识别或知名文件格式
- whois
- 以查找自定义域名的所有者
- 经常失败,即使成功,这些域名也大多是匿名的。候选用于未来移除
## 现有工作
没有我能找到的。
## 项目健康与信息
| 指标 | 健康 | 指标 | 信息 |
|:---|:---|:---|:---|
| 测试 | [](https://github.com/matthewdeanmartin/skip_trace/actions/workflows/build.yml) | 许可证 | [](https://github.com/matthewdeanmartin/skip_trace/blob/main/LICENSE.md) |
| 覆盖率 | [](https://codecov.io/gh/matthewdeanmartin/skip_trace) | PyPI | [](https://pypi.org/project/skip-trace/) |
| 代码规范 / 预提交 | [](https://results.pre-commit.ci/latest/github/matthewdeanmartin/skip_trace/main) | Python 版本 | [](https://pypi.org/project/skip_trace/) |
| 质量门禁 | [](https://sonarcloud.io/summary/new_code?id=matthewdeanmartin_skip_trace) | 文档 | [](https://skip_trace.readthedocs.io/en/latest/) |
| CI 构建 | [](https://github.com/matthewdeanmartin/skip_trace/actions/workflows/build.yml) | 下载量 | [](https://pepy.tech/project/skip_trace) |
| 可维护性 | [](https://sonarcloud.io/summary/new_code?id=matthewdeanmartin_skip_trace) | 最近提交 |  |
| 类别 | 健康 |
|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| **开放问题** |  |
| **星标** |  |
## 3.14 延迟问题
- thinc(与)pytest-randomly 交互
- thinc、blis、spacy 用于命名实体识别(NER)
标签:GitHub 关联, PEP 541, Python 包, skip-trace, spacy, 依赖所有权, 包管理, 域名探测, 实体识别, 开源治理, 弃用包, 招聘联系, 捐赠联系, 接管包, 漏洞披露, 维护者识别, 联系维护者, 软件供应链, 逆向工具, 邮箱查找