fyshdhszs/web-vulnerability-scanner
GitHub: fyshdhszs/web-vulnerability-scanner
基于 OWASP ZAP 的授权 Web 漏洞扫描与报告系统,为教学和靶场场景提供安全受控的漏洞检测与报告导出能力。
Stars: 1 | Forks: 0
# 授权目标 Web 漏洞检测与报告系统
这是一个面向课程大作业的 Web 安全检测报告系统。系统提供登录、白名单管理、授权扫描、漏洞结果展示和 HTML/PDF 报告导出。
系统只用于:
- 本地靶场
- 自有域名
- 老师明确授权目标
- 明确允许测试的课程/演示靶场
系统不是公网任意 URL 扫描器。
## 技术栈
- FastAPI
- Jinja2
- SQLite / SQLAlchemy
- OWASP ZAP sidecar container
- Docker Compose
- ReportLab
## 功能
- 管理员登录后才能使用系统。
- 只允许扫描启用状态的白名单目标。
- 创建扫描任务前会做目标连通性预检查。
- 默认扫描模式:Spider + Passive。
- 增强扫描模式:Spider + Passive + Active,仅显式选择时启用。
- 增强扫描已有边界控制、进度显示、超时停止和部分结果保存。
- 支持扫描取消,并尝试调用 ZAP stop API 停止底层 spider/ascan。
- 支持 HTML/PDF 报告导出。
## 当前演示与部署状态
当前项目已经完成本地演示环境和 Google Cloud VPS 部署。
生产访问地址:
https://scanner.fyshdhszs.com
帮助页和教师使用说明:
https://scanner.fyshdhszs.com/help
https://scanner.fyshdhszs.com/help/download.pdf
当前关键提交:
74c7e8b Polish UI, help page, and report guide
生产部署策略:
- VPS 使用 `docker-compose.prod.yml`。
- Nginx 监听公网 `80/443`。
- FastAPI app 仅绑定到 `127.0.0.1:8000`。
- ZAP 仅在 Docker 内部网络暴露 `8080/tcp`。
- VPS 初始部署保持 `ENABLE_ENHANCED_SCAN=false`。
- 本地演示环境可开启 `ENABLE_ENHANCED_SCAN=true` 展示增强检测能力。
如果生产页面文字已更新但颜色或布局仍像旧版本,通常是浏览器缓存了旧的 `/static/css/style.css`。使用 `Ctrl + F5` 强制刷新即可。
## 本地 Docker 运行
复制配置:
Copy-Item .env.example .env
本地演示可使用:
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin123
SESSION_SECRET=change-this-to-a-long-random-string
ALLOW_PRIVATE_TARGETS=true
ENABLE_ENHANCED_SCAN=true
启动:
docker compose up --build -d
访问:
http://127.0.0.1:8000
查看状态:
docker compose ps
docker compose logs --tail=100 app
docker compose logs --tail=100 zap
停止:
docker compose down
## 增强扫描运行策略
早期实现的扫描封装只适合被动扫描。增强模式直接加入后,会把 spider、passive、active 共用一个总 timeout,并同步等待整站递归 active scan 完整结束,导致任务长时间 `running` 后失败。
当前实现已经修复:
- Spider / Passive / Active 使用分阶段超时。
- Spider 默认限制深度、子节点数和最长运行时间。
- Active scan 默认不递归整站。
- Active scan 使用 LOW attack strength、MEDIUM alert threshold。
- Active scan 有总时长限制和单规则时长限制。
- Active scan 超时会调用 ZAP stop API。
- 超时前已发现的 alerts 会继续保存并生成报告。
- 任务详情页显示 ZAP 阶段、进度、spider ID、active scan ID。
相关配置:
ZAP_SCAN_TIMEOUT_SECONDS=600
ZAP_SPIDER_TIMEOUT_SECONDS=120
ZAP_PASSIVE_TIMEOUT_SECONDS=60
ZAP_ACTIVE_TIMEOUT_SECONDS=300
ZAP_SPIDER_MAX_DEPTH=2
ZAP_SPIDER_MAX_CHILDREN=30
ZAP_SPIDER_MAX_DURATION_MINUTES=2
ZAP_ACTIVE_RECURSE=false
ZAP_ACTIVE_MAX_SCAN_DURATION_MINUTES=5
ZAP_ACTIVE_MAX_RULE_DURATION_MINUTES=1
ZAP_ACTIVE_ATTACK_STRENGTH=LOW
ZAP_ACTIVE_ALERT_THRESHOLD=MEDIUM
本机 `.env` 为了演示更快,当前使用:
ZAP_ACTIVE_TIMEOUT_SECONDS=180
ZAP_ACTIVE_MAX_SCAN_DURATION_MINUTES=3
## 演示流程
1. 打开 `http://127.0.0.1:8000`。
2. 使用 `.env` 中的管理员账号登录。
3. 进入白名单页,确认目标已启用。
4. 在控制台输入白名单内目标 URL。
5. 自有域名建议先用默认被动扫描。
6. 本地靶场或授权靶场可选择增强扫描。
7. 在扫描详情页查看阶段、进度和结果。
8. 下载 HTML/PDF 报告。
## 安全边界
- 不允许扫描非白名单目标。
- 不删除登录限制。
- 不暴露 ZAP API 到公网。
- 默认不执行 active scan。
- 增强扫描必须显式选择,且目标仍必须命中白名单。
- 云服务器部署时建议设置 `ALLOW_PRIVATE_TARGETS=false`。
- ZAP API 在 Compose 中供内部网络使用;本机映射 `127.0.0.1:8090` 仅用于调试。
## 非 Docker 开发运行
需要本机 Python 3.11+,并单独运行 ZAP daemon:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
Copy-Item .env.example .env
uvicorn backend.app.main:app --reload
如果 ZAP 在宿主机:
ZAP_API_URL=http://127.0.0.1:8090
## Google Cloud 迁移建议
完整步骤见:
deployment/scanner-fyshdhszs-com-deployment-plan.md
部署完成后的追溯和常用命令见:
WORK_LOG_2026-05-07_DEPLOYMENT_SUMMARY.md
deployment/vps-operations-runbook.md
云端部署前修改:
ADMIN_PASSWORD=
ADMIN_PASSWORD_HASH=
SESSION_SECRET=
SESSION_COOKIE_SECURE=true
ENABLE_ENHANCED_SCAN=false
ALLOW_PRIVATE_TARGETS=false
SEED_ALLOWLIST_ENABLED=false
VPS 上优先使用生产模板和生产 Compose:
cp deployment/env.production.example .env
nano .env
python3 scripts/preflight_check.py --env .env
docker compose -f docker-compose.prod.yml up -d --build
部署建议:
- 只开放反向代理后的 Web 端口。
- 不要开放 ZAP API 端口。
- 白名单只添加自有域名、老师授权目标或云端内部靶场。
- VPS 初始部署建议关闭种子白名单,上线后登录后台手动添加授权目标。
## 目录结构
web-vulnerability-scanner/
├── backend/app/ # FastAPI 应用
├── data/ # SQLite 数据库目录
├── reports/ # 扫描报告和 ZAP 原始 JSON
├── scripts/ # 辅助脚本和部署前自检
├── deployment/ # VPS 部署计划和生产环境变量模板
├── docker-compose.yml
├── docker-compose.prod.yml
├── Dockerfile
├── requirements.txt
├── PROJECT_PLAN.md
├── AGENT.md
└── README.md
标签:AV绕过, Docker Compose, FastAPI, HTML报告, Jinja2, Nginx, OWASP ZAP, PDF报告导出, ReportLab, Snort++, Spider, SQLAlchemy, SQLite, Talos规则, URL发现, VPS部署, Web安全, Web漏洞, 主动扫描, 任务管理, 安全合规, 安全报告, 安全检测, 密码管理, 批量查询, 授权检测, 插件系统, 版权保护, 白名单管理, 网络代理, 网络安全审计, 网络安全课程, 蓝队分析, 被动扫描, 资产探测, 软件分析, 边界控制, 逆向工具, 靶场系统