cheng-jun-hao/ai-phishing-detector
GitHub: cheng-jun-hao/ai-phishing-detector
该项目是一个基于 CNN+BiLSTM 模型与规则引擎的实时钓鱼网站检测系统,通过 Chrome/Edge 浏览器扩展和 Flask 后端在页面加载前拦截高风险钓鱼攻击。
Stars: 1 | Forks: 0
# AI Phishing Website Detector
[](https://opensource.org/licenses/MIT)
[](https://www.python.org/downloads/)
[](https://developer.chrome.com/docs/extensions/mv3/intro/)
[](https://pytorch.org/)
[](#model-performance)
**[中文文档](README.zh-CN.md)** | **English**
## 目录
- [概述](#overview)
- [核心功能](#key-features)
- [架构](#architecture)
- [模型性能](#model-performance)
- [快速开始](#quick-start)
- [安装](#installation)
- [使用方法](#usage)
- [API 参考](#api-reference)
- [模型训练](#model-training)
- [配置](#configuration)
- [项目结构](#project-structure)
- [技术栈](#tech-stack)
- [贡献](#contributing)
- [许可证](#license)
- [致谢](#acknowledgments)
- [免责声明](#disclaimer)
## 概述
AI Phishing Website Detector 是一个全栈安全解决方案,可以实时保护用户免受钓鱼攻击。它利用了一个**混合检测引擎**,该引擎结合了:
- **Rule Engine** — 10 条静态规则,用于快速 URL 预筛查
- **URL CNN+BiLSTM** — 用于 URL 分类的字符级深度学习模型
- **Form Analyzer** — 对敏感输入字段和表单 action 进行 DOM 级检查
该系统作为 **Chrome/Edge 浏览器扩展** (Manifest V3) 运行,并由 **Flask API server** 提供支持,可拦截导航请求并在高风险钓鱼网站加载前将其拦截。
### 检测流水线
```
User visits URL → Extension intercepts navigation
│
▼
Backend Rule Engine fast pre-screen
│ │ │
High Risk Suspicious Low Risk
│ │ │
▼ ▼ ▼
Block Hybrid Allow
Detection
│
┌──────────────┼──────────────┐
▼ ▼ ▼
URL CNN Form Analysis Brand Trust
│ │ │
└──────────────┼──────────────┘
▼
Dynamic Weight Fusion
│
▼
Detection Result
```
## 核心功能
- **实时防护** — 通过 `webNavigation` API 在页面加载前拦截并分析 URL
- **三级分流** — 低风险(允许) → 可疑(警告横幅) → 高风险(拦截)
- **混合决策引擎** — 融合 Rule Engine (0.40)、CNN model (0.40) 和 Form Analysis (0.20)
- **动态权重分配** — 当某个模块不可用时自动重新分配权重
- **域名信任机制** — 降低已知品牌域名的 CNN 假阳性
- **模型热重载** — 无需重启服务即可更新模型权重
- **双模式 UI** — 普通模式(简洁)和专家模式(详细指标)
- **API 限流** — 防止滥用(检测接口 60 req/min,批量接口 10 req/min)
- **Docker 支持** — 带有健康检查的容器化部署
- **WebSocket 支持** — 通过 WebSocket 协议进行实时检测
## 架构
```
┌─────────────────────────────────────────────────────────┐
│ Browser Extension (Manifest V3) │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │
│ │ popup UI │ │ blocked │ │ background.js │ │
│ │ (popup) │ │ (block) │ │ (nav intercept+comm) │ │
│ └──────────┘ └──────────┘ └──────────┬───────────┘ │
│ │ HTTP/WS │
└─────────────────────────────────────────┼────────────────┘
│
┌─────────────────────────────────────────┼────────────────┐
│ Python Backend (Flask) │ │
│ ┌──────────────────────────────────────▼─────────────┐ │
│ │ API Routes + WebSocket │ │
│ └──────┬─────────────────────────────────────────────┘ │
│ │ │
│ ┌──────▼──────┐ ┌──────────┐ ┌────────────────────┐ │
│ │ Rule Engine │ │ Form │ │ Hybrid Detector │ │
│ │ (10 rules) │ │ Analyzer │ │ (Rule+CNN+Form) │ │
│ └─────────────┘ └──────────┘ └─────────┬──────────┘ │
│ │ │
│ ┌───────────────────────────────────────▼────────────┐ │
│ │ URL CNN+BiLSTM + Screenshotter │ │
│ └────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
```
## 模型性能
基于 [PhiUSIIL Phishing URL Dataset](https://archive.ics.uci.edu/dataset/967/phiusiil+phishing+url+dataset) 进行训练和评估:
| 指标 | 值 |
|--------|-------|
| **Accuracy** | 98.97% |
| **Precision** | 99.28% |
| **Recall** | 98.31% |
| **F1 Score** | 98.79% |
| **AUC-ROC** | 0.9988 |
- **测试样本**:35,306 个 URL(15,078 个钓鱼网站,20,228 个合法网站)
- **假阳性率**:0.53%(108 个合法网站被误判)
- **假阴性率**:1.69%(255 个钓鱼网站被漏报)
## 快速开始
### 前置条件
- Python 3.10+
- Chrome 或 Edge 浏览器(需支持开发者模式)
- 建议 8GB+ RAM
### 1. 克隆并安装后端
```
git clone https://github.com/cheng-jun-hao/ai-phishing-detector.git
cd phishing-detector
pip install -r requirements.txt
# 为表单分析安装 Playwright browser
playwright install chromium
```
### 2. 启动后端服务
```
# 选项 A:直接运行
python -m backend.app
# 选项 B:Docker 部署
docker-compose up -d --build
```
服务将在以下地址提供:
- HTTP API:`http://127.0.0.1:5000/api`
- 健康检查:`http://127.0.0.1:5000/api/health`
- WebSocket:`ws://127.0.0.1:5000/ws`
### 3. 加载浏览器扩展
1. 打开 Chrome/Edge 并导航至 `chrome://extensions/`
2. 启用右上角的 **开发者模式**
3. 点击 **加载已解压的扩展程序**
4. 选择 `extension/` 目录
### 4. 开始检测
- 点击扩展图标手动检查 URL
- 正常浏览 — 高风险钓鱼网站将被自动拦截
- 可疑网站将在顶部显示黄色警告横幅
## 安装
### 后端依赖
该项目需要以下 Python 包(详见 [`requirements.txt`](requirements.txt)):
| 类别 | 包 |
|----------|----------|
| Web 框架 | Flask, Flask-CORS, Flask-SocketIO |
| AI/ML | PyTorch, NumPy, Pandas, scikit-learn |
| 浏览器自动化 | Playwright |
| HTML 解析 | BeautifulSoup4 |
| 字符串匹配 | python-Levenshtein |
| 生产环境 | Gunicorn, psutil |
### Docker 部署
```
# 构建并启动
docker-compose up -d --build
# 查看日志
docker-compose logs -f backend
# 停止
docker-compose down
# 热重载模型
curl -X POST http://localhost:5000/api/model/reload
```
## 使用方法
### 手动检测(弹窗)
1. 点击工具栏中的扩展图标
2. 输入 URL 或使用当前页面的 URL
3. 点击 **检测**
4. 查看结果:
- **普通模式**:风险等级和简要描述
- **专家模式**:详细分数、匹配规则、AI 置信度
### 实时防护
- 默认开启
- 自动拦截高风险钓鱼网站
- 对可疑网站显示警告横幅
- 允许安全网站正常加载
### 设置
- 在普通模式/专家模式之间切换
- 启用/禁用实时检测
- 配置后端服务 URL
- 查看检测历史
## API 参考
| 方法 | Endpoint | 描述 | 速率限制 |
|--------|----------|-------------|------------|
| `POST` | `/api/detect` | 单个 URL 检测 | 60/min |
| `POST` | `/api/detect-batch` | 批量 URL 检测(最多 20 个) | 10/min |
| `GET` | `/api/health` | 包含系统指标的健康检查 | — |
| `GET` | `/api/model/info` | 模型状态和架构 | — |
| `POST` | `/api/model/reload` | 热重载模型(仅限 localhost) | — |
| `WS` | `/ws` | WebSocket 实时检测 | — |
### 请求示例
```
curl -X POST http://127.0.0.1:5000/api/detect \
-H "Content-Type: application/json" \
-d '{"url": "https://login-verify-account.tk/update"}'
```
### 响应示例
```
{
"url": "https://login-verify-account.tk/update",
"is_phishing": true,
"final_risk_score": 70.0,
"risk_level": "high",
"rule_result": {
"rule_score": 70,
"matched_rules": [
{"rule": "suspicious_keywords", "detail": "URL contains suspicious keywords: login, verify, update, account"},
{"rule": "suspicious_tld", "detail": "URL uses suspicious TLD: .tk"}
]
},
"url_cnn_result": {
"phishing_confidence": 0.72,
"prediction": "phishing",
"model_loaded": true
},
"recommendation": "Rule engine classified as high risk, recommend immediate blocking"
}
```
## 模型训练
### 训练 URL CNN+BiLSTM 模型
```
# 首先下载 PhiUSIIL dataset
# https://archive.ics.uci.edu/dataset/967/phiusiil+phishing+url+dataset
python training/train_url_cnn.py \
--data path/to/PhiUSIIL_Phishing_URL_Dataset.csv \
--epochs 20 \
--batch_size 128 \
--output models/url_cnn.pth
```
### 评估模型
```
python training/evaluate.py \
--data path/to/PhiUSIIL_Phishing_URL_Dataset.csv \
--model models/url_cnn.pth
```
### 数据增强策略
训练 pipeline 包含三种增强技术:
1. **通用增强** — 随机移除 `www`,切换 HTTP/HTTPS,截断 query 参数
2. **合法 URL path 增强** — 为较短的合法 URL 添加常见的 path/query,以平衡结构分布
3. **钓鱼 URL HTTPS 增强** — 为 HTTP 钓鱼 URL 创建 HTTPS 变体
### 融合权重
| 模块 | 权重 | 描述 |
|--------|--------|-------------|
| Rule Engine | 0.40 | 快速静态规则预筛查 |
| URL CNN+BiLSTM | 0.40 | 深度学习 URL 特征分析 |
| Form Analysis | 0.20 | DOM 表单敏感字段检测 |
## 配置
所有配置项均支持通过环境变量覆盖:
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `BACKEND_HOST` | `127.0.0.1` | 服务监听地址 |
| `BACKEND_PORT` | `5000` | 服务端口 |
| `DEBUG` | `false` | 调试模式 |
| `SECRET_KEY` | *(开发默认值)* | Flask 密钥(**生产环境中必须设置**) |
| `MODEL_DIR` | `../models` | 模型文件目录 |
| `URL_CNN_MODEL_PATH` | `models/url_cnn.pth` | CNN 模型权重路径 |
| `PAGE_LOAD_TIMEOUT` | `15` | 页面加载超时时间(秒) |
| `RULE_HIGH_RISK_THRESHOLD` | `60` | 高风险分数阈值 |
| `RULE_LOW_RISK_THRESHOLD` | `30` | 低风险分数阈值 |
| `RULE_WEIGHT` | `0.40` | Rule Engine 融合权重 |
| `URL_CNN_WEIGHT` | `0.40` | CNN 融合权重 |
| `FORM_WEIGHT` | `0.20` | Form Analysis 融合权重 |
## 项目结构
```
phishing-detector/
├── extension/ # Browser extension (Manifest V3)
│ ├── manifest.json # Extension configuration
│ ├── popup.html / popup.js # Popup UI (dual-mode)
│ ├── popup.css # Popup styles
│ ├── background.js # Service Worker (navigation intercept)
│ ├── content.js # Content script (warning banner + form monitor)
│ ├── blocked.html / blocked.js # Block warning page
│ ├── settings.html / settings.js # Settings page
│ └── assets/
│ └── icon.svg # Vector icon
│
├── backend/ # Python backend
│ ├── app.py # Service entry point
│ ├── api/
│ │ ├── routes.py # API routes + WebSocket
│ │ └── __init__.py # API module docs
│ ├── engine/
│ │ ├── rule_engine.py # Rule engine (10 detection rules)
│ │ ├── form_analyzer.py # Form analyzer
│ │ ├── screenshotter.py # Headless browser page extractor
│ │ └── __init__.py # Engine module docs
│ ├── models/
│ │ ├── url_cnn.py # URL char-level CNN+BiLSTM
│ │ ├── hybrid_model.py # Hybrid decision model
│ │ └── __init__.py # Model module docs
│ └── utils/
│ ├── config.py # Global config (env var support)
│ ├── middleware.py # Middleware (rate limiting, logging)
│ ├── url_utils.py # URL utility functions
│ └── __init__.py # Utils module docs
│
├── training/ # Model training
│ ├── train_url_cnn.py # URL CNN training script
│ ├── evaluate.py # Model evaluation script
│ └── __init__.py # Training module docs
│
├── models/ # Model files
│ └── url_cnn.pth # URL CNN weights
│
├── .gitignore # Git ignore rules
├── Dockerfile # Docker container config
├── docker-compose.yml # Docker Compose config
├── requirements.txt # Python dependencies
├── LICENSE # MIT License
├── CONTRIBUTING.md # Contribution guidelines
├── README.md # This file (English)
└── README.zh-CN.md # Chinese documentation
```
## 技术栈
| 层级 | 技术 |
|-------|-----------|
| 浏览器扩展 | Manifest V3, Chrome Extensions API, Shadow DOM |
| 后端 | Flask, Flask-SocketIO, Flask-CORS |
| 深度学习 | PyTorch, CNN, BiLSTM |
| 浏览器自动化 | Playwright (Chromium) |
| HTML 解析 | BeautifulSoup4 |
| 字符串匹配 | python-Levenshtein |
| 部署 | Docker, Docker Compose |
| 监控 | psutil |
## Rule Engine 检测项
| 规则 | 权重 | 描述 |
|------|--------|-------------|
| 使用 IP 替代域名 | 20 | 使用 IP 地址代替域名 |
| 可疑关键词 | 15/项 | login/verify/update/account 等 |
| 域名相似度 | 15 | 与已知品牌的编辑距离 |
| URL 过长 | 10 | 超过 75 个字符 |
| 可疑 TLD | 15 | .tk/.ml/.ga/.xyz 等 |
| 特殊字符比例 | 10 | 超过 15% |
| 无 HTTPS | 10 | 明文 HTTP 协议 |
| @ 符号 | 20 | URL 欺骗攻击 |
| 双斜杠重定向 | 15 | 重定向攻击 |
| 过多子域名 | 10 | 超过 3 层 |
## 风险等级划分
| 分数范围 | 风险等级 | 操作 |
|-------------|-----------|--------|
| 0–30 | 低 | 允许 |
| 31–59 | 可疑 | 显示警告横幅 |
| 60–100 | 高 | 拦截 |
## 许可证
本项目基于 MIT License 授权 — 详见 [LICENSE](LICENSE) 文件。
## 致谢
- **数据集**:来自 UCI Machine Learning Repository 的 [PhiUSIIL Phishing URL Dataset](https://archive.ics.uci.edu/dataset/967/phiusiil+phishing+url+dataset)
- **灵感来源**:现代浏览器安全扩展及关于钓鱼检测的学术研究
- **技术栈**:PyTorch, Flask, Playwright, Chrome Extensions API
## 免责声明
本软件仅供**教育和研究目的**使用。尽管它在测试中实现了很高的检测准确率,但没有任何钓鱼检测系统是 100% 有效的。用户应保持警惕,不应仅仅依赖此工具做出安全决策。对于因使用本软件而产生的任何损害或损失,作者不承担任何责任。
**版本**:1.0.0 | **许可证**:MIT | **作者**:cheng-jun-hao
标签:BiLSTM, CNN, Flask, 凭据扫描, 反钓鱼, 安全防护, 浏览器扩展, 深度学习, 特征检测, 请求拦截, 逆向工具