subbuadari/Phishing-Website-Detector
GitHub: subbuadari/Phishing-Website-Detector
一个基于机器学习集成的钓鱼网站检测系统,结合实时仪表板与可解释性分析,提供 URL 风险评分。
Stars: 0 | Forks: 0
# 🛡️ PhishGuard AI — 钓鱼网站检测器
**PhishGuard AI** 是一个由机器学习模型 ensemble 提供支持的全栈、生产级钓鱼网站检测系统。它将高精度的 AI 后端与基于 Flask 和现代 CSS/SVG 动画的实时 **Quantum Security Dashboard** 相结合。
## 🚀 关键特性
- **AI Ensemble Classifier** — 通过软投票结合随机森林、XGBoost、LightGBM 和逻辑回归,实现更高的准确性。
- **LSTM Benchmark** — 包含一个基于 PyTorch 的 LSTM 模型,用于与集成方法比较性能。
- **Real-Time Inference** — 通过基于浏览器的仪表板即时分析任意 URL。
- **Quantum Security Dashboard** — 一个像素完美、带有动画的 UI,包含:
- SVG 圆形仪表盘,带有“旋转”绘制动画。
- 玻璃拟态卡片与霓虹强调条纹。
- 实时词法强度、主机可靠性和全局威胁评分。
- 颜色编码的威胁状态(青色表示安全,红色表示钓鱼)。
- **SHAP 可解释性** — 用于模型可解释性的 SHAP 值可视化。
- **消融研究** — 对单个特征贡献的系统性分析。
## 🧠 AI 架构
### 集成模型
主要分类器使用 `VotingClassifier`(软投票)结合以下模型:
| 模型 | 作用 |
|---|---|
| 随机森林 | 捕捉非线性特征交互 |
| XGBoost | 高准确度的梯度提升树集成 |
| LightGBM | 快速、内存高效的梯度提升 |
| 逻辑回归 | 用于校准的线性基线 |
最终预测由所有四个模型的**平均类别概率**得出,使系统更稳健且不易过拟合。
### LSTM 基准 (`lstm_benchmark.py`)
一个基于 PyTorch 的序列 LSTM 模型,在相同特征集上训练,用于与集成方法比较性能。
## 🔬 特征工程
系统使用 `src/features.py` 从每个 URL 中提取 **14 个结构和词法特征**:
| # | 特征 | 描述 |
|---|---|---|
| 1 | `url_length` | URL 的总字符长度 |
| 2 | `num_dots` | `.` 分隔符的数量(子域) |
| 3 | `num_hyphen` | `-` 字符的数量 |
| 4 | `num_at` | `@` 的数量(常见于钓鱼) |
| 5 | `num_question` | `?` 的数量(查询字符串) |
| 6 | `num_equal` | `=` 的数量(参数赋值) |
| 7 | `num_and` | `&` 的数量(链式参数) |
| 8 | `num_percent` | `%` 的数量(URL 编码) |
| 9 | `num_slash` | `/` 的数量(路径深度) |
| 10 | `num_www` | 是否存在 `www` 子域 |
| 11 | `num_http` | `http` 出现的次数 |
| 12 | `num_https` | `https` 出现的次数 |
| 13 | `has_ip` | 是否使用 IP 地址而非域名 |
| 14 | `path_length` | URL 路径组件的长度 |
## 📊 实时仪表板指标
分析 URL 时,仪表板会计算并显示:
| 指标 | 描述 |
|---|---|
| **安全评估** | 来自集成模型 `predict_proba` 的整体 AI 置信度(0–100) |
| **词法强度** | URL 结构质量评分(对长度、连字符、特殊字符进行惩罚) |
| **主机可靠性** | 协议和域信任评分(奖励 HTTPS,惩罚 IP) |
| **全局威胁评分** | 直接从 AI 概率输出缩放的威胁强度 |
| **主机名** | 输入 URL 的基础域名 |
| **协议** | HTTP 与 HTTPS 检测 |
| **异常数** | 可疑特殊字符(`@`、`%`、`&`、`=`)的数量 |
| **分析引擎** | 使用的 AI 模型:`集成 AI(RF+XGB+LGBM)` |
## 🗂️ 项目结构
```
PhishGuard-AI/
├── src/ # Shared Python package
│ ├── __init__.py
│ └── features.py # 14-feature URL extraction logic
│
├── templates/
│ └── index.html # Quantum Security Dashboard (Flask/Jinja2)
│
├── models/
│ └── phishing_ensemble_model.pkl # Trained VotingClassifier (generated by app.py)
│
├── app.py # Model training & evaluation pipeline
├── app1.py # Alternate training configuration
├── web_app.py # Flask web server & real-time inference
├── lstm_benchmark.py # PyTorch LSTM benchmark model
├── interpretability_shap.py # SHAP explainability visualizations
├── ablation_study.py # Feature ablation study script
├── ablation_study_results.csv # Results of the ablation study
├── model_comparison_results.csv # Comparison of all model accuracies
├── url_dataset.csv # Main training dataset (87,000+ URLs)
├── requirements.txt # Python dependencies
├── .gitignore # Ignores models, cache, and environment files
└── README.md # This file
```
## ⚙️ 设置与安装
### 先决条件
- Python 3.8+
- pip
### 1. 克隆仓库
```
git clone
cd Phishing-Website-Detector-using-LightGBM-XGBoost-Random-Forest-and-Logistic-Regression
```
### 2. 安装依赖
```
pip install -r requirements.txt
```
**依赖包括:**
```
flask, pandas, numpy, scikit-learn, xgboost, lightgbm, joblib, torch, shap, matplotlib
```
### 3. 训练模型
运行训练流水线以生成集成模型:
```
python app.py
```
这将:
- 加载并预处理 `url_dataset.csv`
- 训练 VotingClassifier 集成
- 将模型保存到 `models/phishing_ensemble_model.pkl`
- 打印准确率、分类报告和混淆矩阵
### 4. 启动仪表板
```
python web_app.py
```
打开浏览器并导航至:
```
http://127.0.0.1:5000
```
## 🖥️ 仪表板使用
1. 在搜索栏中输入任意 URL(例如 `https://www.google.com`)。
2. 点击 **Analyze URL**。
3. 仪表板将显示:
- **安全评估量规** — 从 0 到 AI 评分的动画 SVG 弧形绘制。
- **URL 详情卡片** — 主机名、协议、状态、风险、异常数和分析引擎。
- **词法强度** — 带脉冲霓虹指示器的分段条形图。
- **主机可靠性** — WHOIS 处理状态、域名年龄和服务器信任。
- **全局威胁评分** — 带 CLEAN/DANGEROUS 标签的威胁强度。
## 🔧 附加脚本
| 脚本 | 用途 |
|---|---|
| `ablation_study.py` | 测试模型在特征子集上的性能,以识别最具影响力的特征 |
| `interpretability_shap.py` | 生成 SHAP 汇总和条形图用于模型可解释性 |
| `lstm_benchmark.py` | 在相同数据集上训练和评估 PyTorch LSTM 用于比较 |
## 📈 模型性能
结果存储在 `model_comparison_results.csv` 中。集成模型 consistently consistently outperforms individual classifiers by leveraging the complementary strengths of all four algorithms.
## 🛠️ 技术栈
| 层级 | 技术 |
|---|---|
| **后端** | Python、Flask |
| **机器学习模型** | Scikit-Learn、XGBoost、LightGBM |
| **深度学习** | PyTorch(LSTM 基准) |
| **可解释性** | SHAP |
| **前端** | HTML5、CSS3(玻璃拟态)、SVG 动画 |
| **模板** | Jinja2 |
| **数据** | Pandas、NumPy |
## 📌 已知限制
- **域名年龄**:`domain_age` 值由 AI 预测推断(而非实时 WHOIS API)。集成 WHOIS API(例如 DomainTools)将提供确切的注册日期。
- **开发服务器**:使用 Flask 开发服务器进行本地测试。对于生产部署,请使用 **Gunicorn** 或 **Waitress** 等 WSGI 服务器。
- **特征范围**:这 14 个特征纯粹是结构/词法的。未来迭代可以添加基于内容和基于图的特征以提高鲁棒性。
## 🔮 后续改进
- [ ] 集成实时 WHOIS API 以获取准确的域名年龄。
- [ ] 添加基于内容的特征(页面文本、表单操作、重定向)。
- [ ] 在云平台上部署(例如 Render)并使用 Gunicorn。
- [ ] 扩展数据集以包含更多近期钓鱼 URL。
- [ ] 添加用户认证和 URL 扫描历史记录日志。
标签:AI钓鱼检测, Flask, LightGBM, LSTM, Python, PyTorch, SEO钓鱼检测, SHAP可解释性, SVG动画, URL检测, XGBoost, 仪表盘, 凭据扫描, 后端开发, 实时威胁分析, 恶意URL检测, 无后门, 机器学习集成模型, 浏览器仪表盘, 消融研究, 特征提取, 玻璃态设计, 生产级系统, 网络安全, 逆向工具, 逻辑回归, 量子安全仪表盘, 钓鱼网站防御, 随机森林, 隐私保护