navlikescoding/PhishGuard
GitHub: navlikescoding/PhishGuard
PhishGuard 是一个基于机器学习的实时钓鱼URL检测系统,通过分析URL特征快速分类为钓鱼或合法。
Stars: 0 | Forks: 0
# 🛡️ PhishGuard — 钓鱼链接检测系统
## 📌 概述
PhishGuard 是一个端到端的钓鱼 URL 检测系统,它利用机器学习实时将任何 URL 分类为 **钓鱼** 或 **合法**。该系统不分析网页内容,而是直接从 URL 字符串本身提取 33 个结构和统计特征,因此速度快、轻量级且独立于内容。
该系统完全用 R 构建,在包含超过 822,000 个 URL 的大规模标记数据集上进行训练,并使用 Shiny 框架部署为一个交互式 Web 应用程序。
## 🚀 功能
- 🔍 实时 URL 分类 — 结果在 1 秒内返回
- 📊 带有可视化置信度条的置信度分数
- 🧠 4 个机器学习模型经过训练和基准测试
- 📈 模型比较:准确率、精确率、召回率、F1 分数和 AUC-ROC
- 📉 混淆矩阵、ROC 曲线和特征重要性图表
- 🌐 使用 Shiny 构建的交互式 Web 应用程序(PhishGuard)
- 💾 所有模型已保存,无需重新训练即可复用
## 🗂️ 项目结构
```
PhishGuard/
│
├── phishing_detection_v2.R # Main training script (feature engineering + 4 ML models)
├── predict_url_v2.R # Interactive CLI prediction script
├── app.R # Shiny web application (PhishGuard)
├── best_model_xgb.model # Saved XGBoost model (best performer)
├── rf_model.rds # Saved Random Forest model
├── lr_model.rds # Saved Logistic Regression model
├── liblinear_model.rds # Saved LiblineaR model
├── y_test.rds # Test set labels
├── results.rds # Final comparison table
└── new_data_urls.csv # Dataset (822,010 labelled URLs)
```
## 📦 需求
### R 软件包
```
install.packages(c(
"tidyverse", "caret", "randomForest", "xgboost",
"LiblineaR", "e1071", "glmnet", "stringr",
"pROC", "tictoc", "ggplot2", "shiny", "data.table"
))
```
### 系统需求
- R 版本 4.0+
- RStudio(推荐)
- 最少 8GB RAM(对于完整的 822k 数据集,推荐 16GB)
## 📊 数据集
| 属性 | 值 |
|---|---|
| URL 总数 | 822,010 |
| 钓鱼 (0) | 394,927 |
| 合法 (1) | 427,083 |
| 提取的特征 | 33 |
| 训练集拆分 | 70% (~575,407 个 URL) |
| 测试集拆分 | 30% (~246,603 个 URL) |
## 🔧 特征工程
从每个原始 URL 字符串中提取 33 个特征,分为 6 个类别:
| 类别 | 特征 |
|---|---|
| **结构** | URL 长度、点号、斜杠、连字符、下划线、特殊字符、数字 |
| **协议** | HTTPS/HTTP 存在性、双斜杠检测 |
| **域名级别** | 域名长度、子域名计数、域名中的连字符、域名中数字比例、域名是 IP 地址 |
| **安全信号** | 可信域名检查、可疑顶级域名、品牌冒充、URL 编码 |
| **基于关键字** | 仅在域名中的可疑关键字(登录、验证、安全等) |
| **统计** | URL 熵、数字比例、路径长度、查询字符串长度 |
## 🤖 模型与结果
训练并评估了四个机器学习模型:
| 模型 | 准确率 | 精确率 | 召回率 | F1 分数 | AUC-ROC |
|---|---|---|---|---|---|
| 逻辑回归 | 83.06% | 0.8068 | 0.8859 | 0.8445 | 0.905 |
| 随机森林 | **92.29%** | **0.8996** | **0.9584** | **0.9281** | 0.962 |
| XGBoost | 90.98% | 0.8840 | 0.9511 | 0.9163 | **0.971** |
| LiblineaR | 83.05% | 0.8068 | 0.8859 | 0.8445 | 0.905 |
**✅ 最佳模型:XGBoost** — 基于最高 AUC-ROC **0.971** 选择
## ▶️ 如何运行
### 1. 训练模型
```
# 设置工作目录为项目文件夹
setwd("D:/PhishGuard")
# 运行训练脚本
source("phishing_detection_v2.R")
```
### 2. 预测单个 URL(命令行)
```
setwd("D:/PhishGuard")
source("predict_url_v2.R")
# 输入网址,提示时:
# 输入网址:https://paypal-secure-login.tk
# 结果:🚨 PHISHING (置信度:94.3%)
```
### 3. 启动 Web 应用程序
```
setwd("D:/PhishGuard")
shiny::runApp("app.R")
```
PhishGuard Web 应用程序将在您的浏览器中自动打开。
### 4. 重新加载已保存的模型(跳过重新训练)
```
library(xgboost); library(LiblineaR); library(caret); library(pROC)
xgb_model <- xgb.load("best_model_xgb.model")
rf_model <- readRDS("rf_model.rds")
lr_model <- readRDS("lr_model.rds")
liblinear_model <- readRDS("liblinear_model.rds")
y_test <- readRDS("y_test.rds")
results <- readRDS("results.rds")
```
## 🌐 PhishGuard Web 应用程序
PhishGuard Shiny 应用程序提供了一个简洁、实时的 URL 分类界面:
- 将任何 URL 粘贴到输入框中
- 点击 **扫描 URL**
- 立即获得 **钓鱼** 或 **合法** 的结果及置信度分数
- 会话计数器跟踪已扫描总数、检测到的钓鱼 URL 和合法 URL 数量
## 🔬 为何选择这些模型?
| 模型 | 原因 |
|---|---|
| **逻辑回归** | 快速、可解释的基准;识别特征与标签之间的线性关系 |
| **随机森林** | 处理非线性模式,对噪声鲁棒,提供特征重要性分数 |
| **XGBoost** | 迭代修正错误,最适用于细微的欺骗性 URL,在表格数据上处于领先水平 |
| **LiblineaR** | 可扩展的线性 SVM;在数分钟内即可在 560k+ 行数据上进行训练,适用于大型数据集 |
## 🔮 未来工作
- 集成 WHOIS 和域名年龄查询作为额外特征
- 连接 Google Safe Browsing API 或 VirusTotal 进行实时交叉验证
- 尝试使用字符级 CNN 和 LSTM 对原始 URL 进行分类
- 部署为浏览器扩展,提供被动实时保护
- 将 PhishGuard 连接到实时威胁源(PhishTank, OpenPhish)以持续更新
- 随着钓鱼策略的演变,使用新数据定期重新训练模型
## 👥 作者
| 姓名 | 项目 | 机构 |
|---|---|---|
| Navaneeth | M.Tech (Integrated) – CSE with Business Analytics | VIT Chennai |
| Prajeet P C | M.Tech (Integrated) – CSE with Business Analytics | VIT Chennai |
## 📄 许可证
该项目是在 Vellore Institute of Technology, Chennai 为学术目的而开发的。
## 📚 参考文献
1. I. Fette, N. Sadeh, and A. Tomasic, "Learning to detect phishing emails," WWW 2007.
2. M. Prabhakar et al., "Detection of phishing websites using a machine learning algorithm," IJESR, 2020.
3. M. Abdolrazzagh-Nezhad and N. Langarib, "Phishing detection techniques: A review," JOCAI, 2025.
4. A. Abuadbba et al., "Towards robust machine learning-based phishing URL detectors," arXiv:2204.00985, 2022.
5. S. K. Ahammad et al., "Phishing URL detection using machine learning methods," Adv. Eng. Softw., 2022.
标签:Apex, AUC-ROC, LiblineaR, ML系统, R语言, Shiny框架, URL安全, XGBoost, 交互式应用, 在线分类, 实时URL分类, 性能评估, 恶意URL识别, 数据科学, 机器学习, 模型训练, 混淆矩阵, 特征工程, 特征重要性, 网络安全, 资源验证, 逻辑回归, 钓鱼检测, 钓鱼链接检测, 随机森林, 隐私保护