abhizaik/urlvet

GitHub: abhizaik/urlvet

一款开源的网络钓鱼 URL 检测引擎,通过多维度启发式分析提供可解释的信任评分和安全报告。

Stars: 88 | Forks: 12

# url.vet **有些链接看起来可疑?用 url.vet 查一下就知道了。** 开源网络钓鱼检测引擎 —— 粘贴任何 URL 即可获得信任评分、完全可解释的判定结果以及带有实时页面预览的可分享安全报告,所有操作均实时完成。 [![Go](https://img.shields.io/badge/Go-1.24+-00ADD8?logo=go&logoColor=white)](https://go.dev) [![Svelte](https://img.shields.io/badge/Svelte-5-orange?logo=svelte)](https://svelte.dev) [![许可证](https://img.shields.io/badge/License-AGPL--3-blue.svg)](LICENSE) [![GitHub stars](https://img.shields.io/github/stars/abhizaik/urlvet?style=social)](https://github.com/abhizaik/urlvet) [![最后提交](https://img.shields.io/github/last-commit/abhizaik/urlvet)](https://github.com/abhizaik/urlvet/commits/main) [⚡ 快速开始](#quick-start) · [⚙️ 检测引擎](#detection-engine) · [🏛 架构](#architecture) · [📚 文档](#documentation) · [🤝 贡献](#contributing) (前身为 SafeSurf)
## 网络钓鱼检测演示 ![网络钓鱼检测演示](https://raw.githubusercontent.com/abhizaik/urlvet/main/assets/demo.gif) 实时演示:https://url.vet ## 快速开始 ``` git clone https://github.com/abhizaik/urlvet.git cd urlvet make start ``` 打开 Web UI:**[localhost:3000](http://localhost:3000)** 详细设置指南:[docs/setup.md](docs/setup.md) ## 概览 - 实时扫描,即时获取结果 - 18 个分析器,33 个信号,完全可解释 - HTTP API + Web UI + Chrome 扩展 - 可解释的评分(非黑盒 ML) - 简单的 Docker 设置 ## 对比 | 特性 | url.vet | VirusTotal | Google Safe Browsing | URLScan.io | CheckPhish | |---------|----------|------------|----------------------|------------|------------| | 实时抓取,即时结果 | ✅ | 部分 | ❌ | 部分 | 部分 | | 解释每个判定 | ✅ | 部分 | ❌ | 部分 | 部分 | | 对新手友好的界面 | ✅ | 部分 | 部分 | 部分 | 部分 | | 凭据表单检测 | ✅ | ❌ | ❌ | 部分 | ✅ | | 跟踪重定向链 | ✅ | ✅ | ❌ | ✅ | ✅ | | 详细的技术洞察 | ✅ | ❌ | ❌ | ✅ | 部分 | | 实时页面预览 | ✅ | ❌ | ❌ | ✅ | ✅ | | 使用 AI/ML 检测 | ❌ | ✅ | ✅ | 部分 | ✅ | | 已知网络钓鱼数据库覆盖率 | 部分 | ✅ | ✅ | 部分 | 部分 | | 一次扫描多个 URL | ❌ | ✅ | ✅ | ✅ | ❌ | | 浏览器防护 | ✅ | ✅ | ✅ | ✅ | ❌ | | 开源 | ✅ | ❌ | ❌ | ❌ | ❌ | 快速扫描器(如 Google Safe Browsing)仅通过数据库查找给出判定,没有解释或实时扫描。深度抓取工具(如 URLScan.io)耗时过长。url.vet 弥合了这一差距,通过实时执行带有每个信号解释的实时分析来进行 —— 并且它是开源的。 ## 适用人群 - 检查可疑链接的最终用户 - 集成 URL 分析的开发者 - 构建检测流水线的团队 - 安全研究人员 ## API 示例 通过 HTTP 分析 URL: ``` curl "http://localhost:8080/api/v1/analyze?url=https://example.com" ``` **响应示例:**


{

  "url": "https://example.com",

  "trust_score": 100,

  "verdict": "Safe",

  "reasons": {

    "good_reasons": [...]

  }

完整响应结构 → [docs/api.md#example](docs/api.md#example) ## 检测引擎 **18 个并发 goroutine** 运行在 **7 个信号类别** 中,产生 **33 个独立信号**。每次检查都会发出一个原因字符串 —— 好、坏或中立 —— 因此最终评分始终是完全可解释的。没有黑盒判定。 评分公式:`finalScore = clamp(50 + (trustScore − riskScore) × 0.5)` → **Risky** < 30 · **Suspicious** 30–64 · **Safe** ≥ 65 **URL 信号** _(8 项检查)_ 1. 使用原始 IP 地址作为主机名 _(常见的规避策略)_ 2. Punycode / IDN 编码 _(仿冒域名欺骗)_ 3. URL 缩短器 _(隐藏真实目的地)_ 4. URL 长度过长 _(异常长的 URL,用于隐藏目的地或干扰解析器)_ 5. URL 路径深度过深 _(深层嵌套的路径,用于掩盖恶意 endpoint)_ 6. URL 路径中包含网络钓鱼关键词 _(login, verify, secure, update…)_ 7. 子域名数量过多 8. 主机名中包含非 ASCII Unicode 字符 _(IDN 同形异义词攻击,例如使用西里尔字母 а 的 аpple.com)_ **HTTP / 网络** _(4 项检查,单次 HTTP 请求)_ 9. 重定向链跳数 10. 跨域重定向 _(最终目的地与源域名不同)_ 11. HSTS 支持 12. HTTP 状态码 **DNS** _(3 项检查)_ 13. NS 记录有效性 14. MX 记录有效性 15. IP 解析 **TLS / SSL** _(2 项检查,单次 TLS 握手)_ 16. TLS 存在性及主机名不匹配 17. 证书链 —— 有效性、过期时间、颁发者、CT 日志状态、已知不良指纹 **域名情报** _(6 项检查)_ 18. 域名排名 _(全球前 100 万热门榜单中的位置)_ 19. TLD 信任度 / 风险 / ICANN 状态 20. 通过 WHOIS 获取的域名年龄 _(新注册 = 高风险)_ 21. DNSSEC _(加密 DNS 响应完整性)_ 22. 香农熵分数 _(标记算法生成的域名)_ 23. 针对 500+ 个已知品牌的域名抢注与组合抢注 **内容分析** _(8 项检查)_ 24. 未排名或新注册域名上的登录表单 25. 支付表单 _(信用卡、CVV 字段)_ 26. 个人信息表单 27. 隐藏的 `