amr-khaledd/webguard
GitHub: amr-khaledd/webguard
WebGuard 是一款基于 Flask + SQLite 的全栈 Web 漏洞扫描器,提供 SQL 注入、XSS、安全标头审计等五大模块及安全评分功能。
Stars: 0 | Forks: 0
# 🛡️ WebGuard
### Web 漏洞扫描器
[](https://python.org)
[](https://flask.palletsprojects.com)
[](https://sqlite.org)
[](https://restfulapi.net)
[](LICENSE)
一款全栈 **Web 安全扫描工具**,可自动检测 Web 应用中的常见漏洞。
本项目以后端为核心,展示了 REST API 设计、数据库架构、会话认证以及进攻性安全基础。
[功能](#-features) · [技术栈](#-tech-stack) · [API 参考](#-rest-api-reference) · [安装说明](#-setup) · [项目结构](#-project-structure)
## 🔍 扫描目标
| 模块 | 漏洞 | 严重性 | 检测方法 |
|--------|--------------|----------|-----------------|
| `sqli.py` | **SQL 注入 (SQL Injection)** | 🔴 严重 | 向 URL 参数中注入基于错误的 payload |
| `xss.py` | **反射型 XSS (Reflected XSS)** | 🟠 高危 | 探测未进行 HTML 编码的反射检查 |
| `headers.py` | **缺失安全标头** | 🟡 中危 | HTTP 响应标头审计 (CSP, HSTS, X-Frame-Options...) |
| `redirect.py` | **开放重定向 (Open Redirect)** | 🟡 中危 | 将外部域名注入到重定向参数中 |
| `sensitive.py` | **敏感文件暴露** | 🔴 严重 | 探测常见路径:`.env`, `.git`, `phpinfo.php`, `backup.sql` |
每项检测结果包含:
- **严重性级别** (严重 / 高危 / 中危 / 低危 / 信息)
- **证据** — 发现的内容及其位置
- **修复指南** — 精确的代码级修复步骤
- **严重性评分** — 计入总体的 0–100 安全评分
## ✨ 功能
- 🔐 **用户认证** — 使用 SHA-256 哈希密码进行注册/登录 + Flask 会话管理
- 📡 **REST API 后端** — 基于 JSON 的 `/scan` endpoint,遵循 REST 原则的清晰路由结构
- 🗄️ **SQLite 数据库** — 为每位用户持久化扫描历史,无需外部数据库配置
- 📊 **安全评分** — 根据各项严重性级别扣分来计算 0–100 的评分
- 📋 **扫描历史** — 存储每次扫描并支持查看完整的报告详情
- 🛡️ **5 个扫描模块** — 模块化架构,每个模块均可独立检测和扩展
- 🌐 **CORS 支持** — 通过 `flask-cors` 处理跨域请求
- ⚡ **异步用户体验** — 后台运行扫描时提供进度条 + 实时状态
## 🖥️ 技术栈
### 后端
| 技术 | 用途 |
|------------|-------|
| **Python 3** | 核心语言 |
| **Flask** | Web 框架、路由、Jinja2 模板 |
| **SQLite** | 关系型数据库 — 存储用户和扫描历史 |
| **requests** | 用于发送攻击 payload 的 HTTP 客户端 |
| **flask-cors** | 跨域资源共享中间件 |
### API 设计
| 概念 | 实现 |
|---------|---------------|
| **REST API** | JSON 请求/响应,恰当的 HTTP 状态码 (200, 400, 401, 409) |
| **会话认证** | 带有密钥的 Flask 服务端会话 |
| **输入校验** | URL 格式检查,必填字段验证 |
| **错误处理** | 结构化的 JSON 错误响应 |
### 前端
| 技术 | 用途 |
|------------|-------|
| **HTML5 + CSS3** | UI 结构与深色主题样式 |
| **Vanilla JavaScript** | Fetch API、DOM 操作、async/await |
| **Jinja2** | 服务端模板 |
## 📡 REST API 参考
### `POST /scan`
对目标 URL 运行漏洞扫描。
**请求**
```
POST /scan
Content-Type: application/json
Cookie: session=
{
"url": "https://target-website.com"
}
```
**响应 `200 OK`**
```
{
"scan_id": "3f2a1b4c-...",
"url": "https://target-website.com",
"score": 42,
"results": {
"sqli": [],
"xss": [],
"headers": [
{
"type": "Missing Header: Content-Security-Policy",
"severity": "High",
"severity_score": 15,
"parameter": "HTTP Response Header",
"payload": "N/A",
"evidence": "Header 'Content-Security-Policy' not present in server response.",
"fix": "Add: Content-Security-Policy: default-src 'self'; script-src 'self'"
}
],
"redirect": [],
"sensitive": []
}
}
```
**错误响应**
```
{ "error": "Login required" } // 401 — not authenticated
{ "error": "URL is required" } // 400 — missing body field
{ "error": "URL must start with http" } // 400 — invalid URL format
```
### `POST /register`
创建新用户账户。
```
POST /register
Content-Type: application/json
{ "username": "amr", "password": "mypassword" }
```
| 状态码 | 含义 |
|--------|---------|
| `200` | 账户创建成功 |
| `400` | 缺少必填字段或密码过短 |
| `409` | 用户名已被占用 |
### `POST /login`
进行认证并开启会话。
```
POST /login
Content-Type: application/json
{ "username": "amr", "password": "mypassword" }
```
### `GET /api/history`
获取已登录用户的最近 10 次扫描记录。
```
GET /api/history
Cookie: session=
```
**响应**
```
[
{
"id": "3f2a1b4c-...",
"target_url": "https://example.com",
"score": 42,
"created_at": "2025-06-12T14:30:00"
}
]
```
## ⚙️ 安装说明
### 环境要求
- Python 3.8+
- pip
### 1. 克隆仓库
```
git clone https://github.com/YOUR_USERNAME/webguard.git
cd webguard
```
### 2. 创建虚拟环境
```
python -m venv venv
```
激活:
```
# Windows
venv\Scripts\activate
# Mac / Linux
source venv/bin/activate
```
### 3. 安装依赖
```
pip install -r requirements.txt
```
### 4. 运行应用
```
python app.py
```
在浏览器中打开 **http://localhost:5000**。
### 5. 首次操作步骤
1. 点击 **注册** → 创建您的账户
2. 登录
3. 输入任何您拥有或有权测试的 URL
4. 点击 **▶ 扫描 (SCAN)**
5. 按模块查看包含严重性、证据和修复指南的检测结果
6. 点击 **历史** 以回顾过去的扫描记录
## 📁 项目结构
```
webguard/
│
├── app.py ← Flask app: routes, auth, DB init, scan orchestration
├── requirements.txt ← Python dependencies
├── webguard.db ← SQLite DB (auto-created on first run)
│
├── scanner/ ← Vulnerability detection modules
│ ├── __init__.py
│ ├── sqli.py ← SQL Injection: error-based payload injection
│ ├── xss.py ← XSS: reflected probe detection
│ ├── headers.py ← Security headers: HTTP response audit
│ ├── redirect.py ← Open Redirect: external domain injection
│ └── sensitive.py ← Sensitive files: path probing
│
└── templates/ ← Jinja2 HTML templates
├── auth.html ← Login / Register
├── index.html ← Main scanner UI
├── history.html ← Scan history table
└── detail.html ← Full scan report
```
## 🏗️ 架构概览
```
Browser (JS fetch)
│
▼
Flask Routes (app.py)
├── /register POST → validate → hash pw → INSERT users
├── /login POST → verify hash → set session
├── /scan POST → run 5 scanners → compute score → INSERT scans
├── /history GET → SELECT scans WHERE user_id = session
└── /scan/:id GET → SELECT scan + render report
│
▼
Scanner Modules (scanner/)
Each module: URL → HTTP request(s) → analyze response → return findings[]
│
▼
SQLite Database
├── users (id, username, password_hash, created_at)
└── scans (id, user_id, target_url, results_json, score, created_at)
```
## 🔒 关于扫描器自身的安全说明
| 关注点 | 处理方式 |
|---------|-----------------|
| 密码存储 | SHA-256 哈希 — 绝不以明文形式存储 |
| 应用自身的 SQL 注入防护 | 全面使用参数化查询 (`?` 占位符) |
| 会话安全 | Flask 密钥;注销时会话即过期 |
| 扫描授权 | 扫描与 `user_id` 绑定 — 用户只能查看自己的扫描记录 |
## 🚀 未来改进
- [ ] 迁移至 **FastAPI**,使用 Pydantic 请求验证和异步扫描
- [ ] 添加 **JWT 认证** 以替代 session cookie
- [ ] 为生产环境部署提供 **PostgreSQL** 支持
- [ ] 使用 `asyncio` + `httpx` 进行异步并发扫描
- [ ] 扫描报告导出为 PDF
- [ ] 按用户进行速率限制 (防止滥用)
- [ ] 支持 Docker 以便轻松部署
## 📚 构建此项目的收获
- 从零开始设计 **REST API** — 路由、状态码、JSON 响应
- **SQL 注入**、**XSS** 和 **开放重定向** 攻击在 HTTP 层面到底是如何运作的
- **基于会话的认证**流程 — 登录、会话存储、受保护路由
- **SQLite** schema 设计和参数化查询
- 模块化的 Python 后端架构 — 路由与扫描逻辑之间的关注点分离
- 真实的漏洞扫描器 (Nikto, OWASP ZAP) 是如何以编程方式检测问题的
## ⚠️ 法律免责声明
## 👤 作者
**AMR** — 西奈大学计算机科学专业学生
热爱 Web 应用安全、Bug Bounty 猎挖以及后端开发。
⭐ 如果这个项目对您有帮助,欢迎在 GitHub 上点个 Star!
标签:CISA项目, DOE合作, Flask, Python, REST API, Web安全, 加密, 后端开发, 无后门, 漏洞扫描器, 蓝队分析, 逆向工具