amr-khaledd/webguard

GitHub: amr-khaledd/webguard

WebGuard 是一款基于 Flask + SQLite 的全栈 Web 漏洞扫描器,提供 SQL 注入、XSS、安全标头审计等五大模块及安全评分功能。

Stars: 0 | Forks: 0

# 🛡️ WebGuard ### Web 漏洞扫描器 [![Python](https://img.shields.io/badge/Python-3.8+-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://python.org) [![Flask](https://img.shields.io/badge/Flask-3.0-000000?style=for-the-badge&logo=flask&logoColor=white)](https://flask.palletsprojects.com) [![SQLite](https://img.shields.io/badge/SQLite-003B57?style=for-the-badge&logo=sqlite&logoColor=white)](https://sqlite.org) [![REST API](https://img.shields.io/badge/REST-API-FF6C37?style=for-the-badge&logo=postman&logoColor=white)](https://restfulapi.net) [![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)](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安全, 加密, 后端开发, 无后门, 漏洞扫描器, 蓝队分析, 逆向工具