abhizaik/urlvet
GitHub: abhizaik/urlvet
一款开源的网络钓鱼 URL 检测引擎,通过多维度启发式分析提供可解释的信任评分和安全报告。
Stars: 88 | Forks: 12
# url.vet
**有些链接看起来可疑?用 url.vet 查一下就知道了。**
开源网络钓鱼检测引擎 —— 粘贴任何 URL 即可获得信任评分、完全可解释的判定结果以及带有实时页面预览的可分享安全报告,所有操作均实时完成。
[](https://go.dev)
[](https://svelte.dev)
[](LICENSE)
[](https://github.com/abhizaik/urlvet)
[](https://github.com/abhizaik/urlvet/commits/main)
[⚡ 快速开始](#quick-start) · [⚙️ 检测引擎](#detection-engine) · [🏛 架构](#architecture) · [📚 文档](#documentation) · [🤝 贡献](#contributing)
(前身为 SafeSurf)
## 网络钓鱼检测演示

实时演示: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. 隐藏的 `