matthewdeanmartin/skip_trace

GitHub: matthewdeanmartin/skip_trace

一款用于探查 Python 依赖包所有者与维护者联系的安全工具。

Stars: 2 | Forks: 0

# skip_trace ## 谁拥有你的依赖 - 它们能否与现实世界中的个人或公司关联 - 能否联系到他们 当然,所有包都有一个 PyPI 用户。用户的列表并非学术性的,你关心他们是因为你想: 与它们沟通。 [![tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/2feb323a0b184222.svg) ](https://github.com/matthewdeanmartin/skip_trace/actions/workflows/tests.yml) [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/matthewdeanmartin/skip_trace/main.svg) ](https://results.pre-commit.ci/latest/github/matthewdeanmartin/skip_trace/main) [![Downloads](https://img.shields.io/pypi/dm/skip-trace)](https://pypistats.org/packages/skip-trace) [![Python Version](https://img.shields.io/pypi/pyversions/skip-trace) ![Release](https://img.shields.io/pypi/v/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 - 以查找自定义域名的所有者 - 经常失败,即使成功,这些域名也大多是匿名的。候选用于未来移除 ## 现有工作 没有我能找到的。 ## 项目健康与信息 | 指标 | 健康 | 指标 | 信息 | |:---|:---|:---|:---| | 测试 | [![Tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/2feb323a0b184222.svg)](https://github.com/matthewdeanmartin/skip_trace/actions/workflows/build.yml) | 许可证 | [![License](https://img.shields.io/github/license/matthewdeanmartin/skip_trace)](https://github.com/matthewdeanmartin/skip_trace/blob/main/LICENSE.md) | | 覆盖率 | [![Codecov](https://codecov.io/gh/matthewdeanmartin/skip_trace/branch/main/graph/badge.svg)](https://codecov.io/gh/matthewdeanmartin/skip_trace) | PyPI | [![PyPI](https://img.shields.io/pypi/v/skip-trace)](https://pypi.org/project/skip-trace/) | | 代码规范 / 预提交 | [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/matthewdeanmartin/skip_trace/main.svg)](https://results.pre-commit.ci/latest/github/matthewdeanmartin/skip_trace/main) | Python 版本 | [![Python Version](https://img.shields.io/pypi/pyversions/skip_trace)](https://pypi.org/project/skip_trace/) | | 质量门禁 | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=matthewdeanmartin_skip_trace\&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=matthewdeanmartin_skip_trace) | 文档 | [![Docs](https://readthedocs.org/projects/skip_trace/badge/?version=latest)](https://skip_trace.readthedocs.io/en/latest/) | | CI 构建 | [![Build](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/2feb323a0b184222.svg)](https://github.com/matthewdeanmartin/skip_trace/actions/workflows/build.yml) | 下载量 | [![Downloads](https://static.pepy.tech/personalized-badge/skip_trace?period=total\&units=international_system\&left_color=grey\&right_color=blue\&left_text=Downloads)](https://pepy.tech/project/skip_trace) | | 可维护性 | [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=matthewdeanmartin_skip_trace\&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=matthewdeanmartin_skip_trace) | 最近提交 | ![Last Commit](https://img.shields.io/github/last-commit/matthewdeanmartin/skip_trace) | | 类别 | 健康 | |-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------| | **开放问题** | ![GitHub issues](https://img.shields.io/github/issues/matthewdeanmartin/skip_trace) | | **星标** | ![GitHub Repo stars](https://img.shields.io/github/stars/matthewdeanmartin/skip_trace?style=social) | ## 3.14 延迟问题 - thinc(与)pytest-randomly 交互 - thinc、blis、spacy 用于命名实体识别(NER)
标签:GitHub 关联, PEP 541, Python 包, skip-trace, spacy, 依赖所有权, 包管理, 域名探测, 实体识别, 开源治理, 弃用包, 招聘联系, 捐赠联系, 接管包, 漏洞披露, 维护者识别, 联系维护者, 软件供应链, 逆向工具, 邮箱查找