菜单

站点数据系统

相关源文件

目的和概述

Site Data System 是 Sherlock 项目的核心组件,它定义了如何在不同的社交网络和网站上搜索用户名。它主要由一个结构化的 JSON 数据库组成,其中包含 Sherlock 查询每个支持的站点并确定用户名是否存在于该平台所需的信息。

本文档涵盖:

  • 站点数据配置的结构和模式
  • 用于确定用户名存在的错误检测方法
  • 站点配置的组织和维护方式

有关搜索引擎如何实际处理此数据以执行用户名搜索的信息,请参阅 用户名搜索引擎

数据结构概述

Site Data System 以一个 JSON 文件(data.json)为中心,该文件包含所有受支持网站的配置。每个站点条目都包含 Sherlock 所需的信息,用于

  1. 构建有效的用户名查询 URL
  2. 确定用户名是否存在于该站点
  3. 处理站点特定的要求和限制

来源:sherlock_project/resources/data.json1-2741

错误检测方法

Site Data System 采用三种主要方法来确定用户名在给定平台是否存在。使用的方法由每个站点配置中的 errorType 字段指定。

状态码检测

最简单的方法是检查 HTTP 响应状态码是否为 200 (OK)。非 200 状态码通常表示用户名不存在。

使用状态码检测的示例配置

"GitHub": {
  "errorType": "status_code",
  "regexCheck": "^<FileRef file-url="https://github.com/sherlock-project/sherlock/blob/4428b151/a-zA-Z0-9" undefined  file-path="a-zA-Z0-9">Hii</FileRef>){0,38}$",
  "url": "https://www.github.com/{}",
  "urlMain": "https://www.github.com/",
  "username_claimed": "blue"
}

错误消息检测

此方法在响应体中查找指示用户名不存在的特定文本模式。

使用消息检测的示例配置

"Reddit": {
  "errorMsg": "Sorry, nobody on Reddit goes by that name.",
  "errorType": "message",
  "headers": {
    "accept-language": "en-US,en;q=0.9"
  },
  "url": "https://www.reddit.com/user/{}",
  "urlMain": "https://www.reddit.com/",
  "username_claimed": "blue"
}

响应 URL 检测

此方法检查任何重定向后的最终 URL 是否与特定的错误 URL 匹配,这表明用户名不存在。

使用响应 URL 检测的示例配置

"Cracked": {
  "errorType": "response_url",
  "errorUrl": "https://www.cracked.com/",
  "url": "https://www.cracked.com/members/{}/",
  "urlMain": "https://www.cracked.com/",
  "username_claimed": "blue"
}

来源:sherlock_project/resources/data.json3-741

高级站点配置功能

除了基本的检测方法外,Site Data System 还支持几项高级功能来处理复杂的网站。

用户名验证

许多网站都有有效的用户名的特定规则。regexCheck 字段提供了一个正则表达式模式,用于在检查之前验证用户名。这有助于防止对明显无效的用户名向站点发出不必要的请求。

"Flipboard": {
  "errorType": "status_code",
  "regexCheck": "^([a-zA-Z0-9_]){1,15}$",
  "url": "https://flipboard.com/@{}",
  "urlMain": "https://flipboard.com/",
  "username_claimed": "blue"
}

自定义 HTTP 请求

对于需要更复杂请求处理的站点,Site Data System 支持

  1. 自定义 HTTP 标头
  2. 不同的 HTTP 方法(GET、POST)
  3. POST 请求的请求负载
  4. 探查的备用 URL

带有自定义请求配置的示例

"Discord": {
  "errorType": "message",
  "url": "https://discord.com",
  "urlMain": "https://discord.com/",
  "urlProbe": "https://discord.com/api/v9/unique-username/username-attempt-unauthed",
  "errorMsg": [
    "{\"taken\":false}",
    "The resource is being rate limited"
  ],
  "request_method": "POST",
  "request_payload": {
    "username": "{}"
  },
  "headers": {
    "Content-Type": "application/json"
  },
  "username_claimed": "blue"
}

NSFW 站点标记

包含成人内容的站点会通过 isNSFW 标志进行标记

"Pornhub": {
  "errorType": "status_code",
  "isNSFW": true,
  "url": "https://pornhub.com/users/{}",
  "urlMain": "https://pornhub.com/",
  "username_claimed": "blue"
}

来源:sherlock_project/resources/data.json742-1336

数据流和集成

Sherlock 引擎在运行时加载 Site Data System,并使用它来构建和处理对每个已配置站点的请求。下图说明了数据如何在系统中流动。

来源:sherlock_project/resources/data.json1337-2038

站点配置生命周期

Site Data System 需要持续维护以确保准确性和可靠性。随着网站行为的变化,可能会添加、更新或删除网站。

添加新站点

新站点通过以下流程添加到系统中:

  1. 确定用于用户名检查的 URL 模式
  2. 确定适当的错误检测方法
  3. 使用已知的存在和不存在的用户名进行测试
  4. 将站点配置添加到 data.json

删除站点

对于出现问题的站点,会进行记录并将其从活动配置中删除。删除的常见原因包括:

  1. 误报/漏报:网站错误地报告用户名存在,但实际上不存在
  2. 保护机制:网站实施了验证码、速率限制或其他反自动化措施
  3. 网站结构更改:网站更改了其 URL 结构或错误处理方式
  4. 网站关闭:网站下线或停止支持公开用户名查找

这些站点被记录在“removed-sites.md”文件中以供参考。

来源:docs/removed-sites.md1-1985 sherlock_project/resources/data.json2039-2741

常见配置模式

为了更好地理解 Site Data System,让我们来研究一下不同类型站点中常见的配置模式。

基础社交媒体网站

大多数社交网络遵循一个简单的模式:一个可预测的 URL,其中插入用户名,并进行状态码检查。

"Twitter": {
  "errorMsg": [
    "<div class=\"error-panel\"><span>User ",
    "<title>429 Too Many Requests</title>"
  ],
  "errorType": "message",
  "regexCheck": "^[a-zA-Z0-9_]{1,15}$",
  "url": "https://x.com/{}",
  "urlMain": "https://x.com/",
  "urlProbe": "https://nitter.privacydev.net/{}",
  "username_claimed": "blue"
}

论坛和社区网站

论坛通常具有更复杂的检测方法,通常会查找特定的错误消息。

"Reddit": {
  "errorMsg": "Sorry, nobody on Reddit goes by that name.",
  "errorType": "message",
  "headers": {
    "accept-language": "en-US,en;q=0.9"
  },
  "url": "https://www.reddit.com/user/{}",
  "urlMain": "https://www.reddit.com/",
  "username_claimed": "blue"
}

开发者平台

面向开发者的网站通常有更严格的用户名要求。

"GitHub": {
  "errorType": "status_code",
  "regexCheck": "^<FileRef file-url="https://github.com/sherlock-project/sherlock/blob/4428b151/a-zA-Z0-9" undefined  file-path="a-zA-Z0-9">Hii</FileRef>){0,38}$",
  "url": "https://www.github.com/{}",
  "urlMain": "https://www.github.com/",
  "username_claimed": "blue"
}

来源:sherlock_project/resources/data.json879-884 sherlock_project/resources/data.json1675-1684 sherlock_project/resources/data.json2088-2100

故障排除和维护

Site Data System 需要持续维护以确保准确性。常见问题及其解决方案包括:

误报

当网站错误地报告用户名存在但实际上不存在时,可能需要

  • 切换到不同的错误检测方法
  • 添加多个错误消息模式
  • 使用 API 端点而不是网页

漏报

当网站未能检测到存在的用户名时,可能需要

  • 调整请求标头,使其更像浏览器
  • 使用不同的 URL 模式
  • 实施自定义请求逻辑

速率限制

实施速率限制的网站可能需要

  • 在请求之间添加延迟
  • 使用旋转代理
  • 添加正确的请求标头
  • 在极端情况下,从活动检查中删除该网站

已删除网站的文档

removed-sites.md》文件包含有关有问题的网站的宝贵信息,包括:

  • 删除原因
  • 原始配置
  • 未来的潜在解决方案

此文档有助于防止重复出现问题,并提供站点配置的历史记录。

来源:docs/removed-sites.md1-300 docs/removed-sites.md301-600 docs/removed-sites.md601-900

结论

Site Data System 是 Sherlock 的一个关键组件,它能够对各种网站进行灵活、可维护且准确的用户名搜索。其设计允许

  1. 轻松添加新站点
  2. 多种错误检测方法
  3. 站点特定的定制
  4. 优雅地处理有问题的网站

通过维护此结构化数据,Sherlock 能够有效地搜索数百个网站,同时随着时间的推移适应网站行为和结构的变更。