kthnsolanki/Spam-Shield
GitHub: kthnsolanki/Spam-Shield
基于朴素贝叶斯分类器的全栈垃圾消息与恶意 URL 检测平台,提供实时 ML 推理、批量扫描和扫描历史审计功能。
Stars: 0 | Forks: 0
# 🛡️ Spam Shield — 基于 AI 的消息与 URL 安全系统
## 📌 概述
Spam Shield 是一个作为大学项目开发的全栈机器学习 Web 应用程序。它使用基于超过 35,000 个真实样本训练的朴素贝叶斯分类器,将 SMS 和电子邮件分类为 **垃圾邮件 (spam) 或正常邮件 (ham)**。该平台包括用户身份验证、三个扫描模块和个人扫描历史记录——所有这些都可以通过简洁的 Web 界面访问,无需任何外部工具。
## ✨ 功能
| 功能 | 描述 |
|---|---|
| ✉️ **消息扫描器** | 将任何 SMS 或电子邮件分类为垃圾邮件/正常邮件,并附带置信度百分比和高亮显示的垃圾邮件关键词 |
| 🔗 **URL 检查器** | 深度基于规则的分析——HTTPS 检查、域名解析、IP 查找、TLD 风险、子域名计数 |
| 📂 **批量扫描器** | 上传 `.txt` 或 `.csv` 文件并一次性扫描数百条消息,显示完整结果表格 |
| 🔐 **用户身份验证** | 使用 JWT token 和 bcrypt 哈希密码进行注册和登录 |
| 🗄️ **扫描历史** | 每次扫描都会保存到个人的 SQLite 数据库中——可按类型过滤,可逐条记录删除 |
| 🎨 **现代 UI** | 使用纯 HTML/CSS/JS 构建的响应式 Web 界面——无需框架 |
## 🧠 ML 架构
| 组件 | 详情 |
|---|---|
| 算法 | 多项式朴素贝叶斯 |
| 特征提取 | TF-IDF Vectorizer (sklearn) |
| 训练数据集 1 | Enron 电子邮件数据集 — 29,779 个样本 |
| 训练数据集 2 | UCI SMS 垃圾邮件收集 — 5,572 个样本 |
| 合并数据集 | 35,351 个样本(已打乱,80/20 拆分) |
| 模型准确率 | 测试集上约为 98% |
| 保存的文件 | `spam_model.pkl`, `tfidf_vectorizer.pkl` |
## 🗂️ 项目结构
```
spam_shield/
│
├── app.py # FastAPI backend — all routes and auth logic
├── model_util.py # ML prediction, spam word detection, URL analysis
├── database.py # SQLAlchemy models — User and ScanHistory tables
│
├── spam_model.pkl # Trained Naive Bayes model
├── tfidf_vectorizer.pkl # Fitted TF-IDF vectorizer
├── spam_shield.db # SQLite database (auto-created on first run)
│
├── templates/
│ └── index.html # Full frontend — auth, 3 modules, history view
│
├── comb_db.ipynb # Notebook: combining Enron + SMS datasets
└── train_test.ipynb # Notebook: model training and evaluation
```
## ⚙️ 安装与设置
### 1. 克隆代码库
```
git clone https://github.com/yourusername/spam-shield.git
cd spam-shield
```
### 2. 安装依赖
```
pip install fastapi uvicorn jinja2 python-multipart scikit-learn pandas joblib sqlalchemy "passlib[bcrypt]" "bcrypt==4.0.1" PyJWT tldextract
```
### 3. 确保存在这些文件
```
spam_model.pkl
tfidf_vectorizer.pkl
templates/index.html
```
### 4. 运行应用程序
```
python app.py
```
### 5. 在浏览器中打开
```
http://localhost:8000
```
## 🚀 用法
1. **注册**一个新账户或使用现有凭据**登录**
2. 使用 **Message Scan** 选项卡粘贴任何可疑的 SMS 或电子邮件
3. 使用 **URL Checker** 选项卡分析任何 URL 的网络钓鱼指标
4. 使用 **Batch Scanner** 选项卡上传 `.txt` 或 `.csv` 文件进行批量分析
5. 点击顶部的 **History** 栏以查看、过滤和删除您过去的扫描记录
## 🗃️ 数据库 Schema
### `users` 表
| 字段 | 类型 | 约束 |
|---|---|---|
| id | INT | PRIMARY KEY, AUTO INCREMENT |
| username | VARCHAR(50) | NOT NULL, UNIQUE |
| email | VARCHAR(120) | NOT NULL, UNIQUE |
| hashed_password | VARCHAR | NOT NULL |
| created_at | DATETIME | DEFAULT UTC NOW |
### `scan_history` 表
| 字段 | 类型 | 约束 |
|---|---|---|
| id | INT | PRIMARY KEY, AUTO INCREMENT |
| user_id | INT | FOREIGN KEY → users.id |
| scan_type | VARCHAR(20) | "message" / "url" / "batch" |
| input_content | TEXT | NOT NULL |
| result | VARCHAR(50) | spam / ham / SAFE / HIGH RISK |
| confidence | FLOAT | NULLABLE |
| extra_info | TEXT | NULLABLE (reserved) |
| created_at | DATETIME | DEFAULT UTC NOW |
## 🛠️ 技术栈
| 层级 | 技术 |
|---|---|
| 后端 | Python, FastAPI, Uvicorn |
| 机器学习 | Scikit-learn (朴素贝叶斯 + TF-IDF) |
| 数据库 | 通过 SQLAlchemy ORM 访问的 SQLite |
| 身份验证 | JWT (PyJWT) + bcrypt (passlib) |
| 前端 | HTML5, CSS3, 原生 JavaScript |
| URL 分析 | tldextract, socket (Python 标准库) |
## 📋 依赖项
```
fastapi
uvicorn
jinja2
python-multipart
scikit-learn
pandas
joblib
sqlalchemy
passlib[bcrypt]
bcrypt==4.0.1
PyJWT
tldextract
```
## 📖 参考
- Metsis et al. (2006) — 使用朴素贝叶斯进行垃圾邮件过滤
- Almeida et al. (2011) — UCI SMS 垃圾邮件收集数据集
- Enron 电子邮件数据集 — 卡内基梅隆大学
- Scikit-learn 文档 — https://scikit-learn.org
- FastAPI 文档 — https://fastapi.tiangolo.com
## 👨💻 作者
作为**大学项目 — 2026** 开发
计算机科学系
## 📄 许可证
本项目仅供学术目的使用。
标签:Apex, AV绕过, FastAPI, Scikit-Learn, Web安全, 垃圾信息分类, 多模态安全, 威胁情报, 开发者工具, 数据可视化, 机器学习, 蓝队分析, 逆向工具