Site Data System 是 Sherlock 项目的核心组件,它定义了如何在不同的社交网络和网站上搜索用户名。它主要由一个结构化的 JSON 数据库组成,其中包含 Sherlock 查询每个支持的站点并确定用户名是否存在于该平台所需的信息。
本文档涵盖:
有关搜索引擎如何实际处理此数据以执行用户名搜索的信息,请参阅 用户名搜索引擎。
Site Data System 以一个 JSON 文件(data.json)为中心,该文件包含所有受支持网站的配置。每个站点条目都包含 Sherlock 所需的信息,用于
来源: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 检测的示例配置
"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"
}
对于需要更复杂请求处理的站点,Site Data System 支持
带有自定义请求配置的示例
"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"
}
包含成人内容的站点会通过 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 需要持续维护以确保准确性和可靠性。随着网站行为的变化,可能会添加、更新或删除网站。
新站点通过以下流程添加到系统中:
data.json对于出现问题的站点,会进行记录并将其从活动配置中删除。删除的常见原因包括:
这些站点被记录在“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 需要持续维护以确保准确性。常见问题及其解决方案包括:
当网站错误地报告用户名存在但实际上不存在时,可能需要
当网站未能检测到存在的用户名时,可能需要
实施速率限制的网站可能需要
《removed-sites.md》文件包含有关有问题的网站的宝贵信息,包括:
此文档有助于防止重复出现问题,并提供站点配置的历史记录。
来源:docs/removed-sites.md1-300 docs/removed-sites.md301-600 docs/removed-sites.md601-900
Site Data System 是 Sherlock 的一个关键组件,它能够对各种网站进行灵活、可维护且准确的用户名搜索。其设计允许
通过维护此结构化数据,Sherlock 能够有效地搜索数百个网站,同时随着时间的推移适应网站行为和结构的变更。