s4mm1t/web-vuln-lab
GitHub: s4mm1t/web-vuln-lab
一个基于 Flask 的 Web 安全教学实验室,通过漏洞与修复版本的成对对比演示常见 Web 漏洞原理及防御方法。
Stars: 1 | Forks: 0
# Web 漏洞实验室
这是一个教学性质的 Flask 实验室,用于演示常见的 Web 漏洞及其安全修复方法。
本项目仅限用于本地学习。每个模块都包含一个故意设置漏洞的实现、一个修复后的实现、一份分析报告,以及用于证明两者安全性差异的回归测试。
## 模块
| 模块 | 漏洞演示 | 修复演示 | 主题 |
|---|---|---|---|
| SQL 注入 | `/sqli/vulnerable` | `/sqli/fixed` | 参数化查询 |
| XSS | `/xss/vulnerable` | `/xss/fixed` | 输出转义与 CSP |
| 文件上传 | `/upload/vulnerable` | `/upload/fixed` | 文件验证 |
| 身份验证缺陷 | `/auth/vulnerable` | `/auth/fixed` | Session 与密码哈希 |
| IDOR | `/idor/vulnerable` | `/idor/fixed` | 授权检查 |
## 快速开始
```
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
flask --app app.main run --debug
```
打开 http://localhost:5000。
## Docker
```
docker compose up --build
```
打开 http://localhost:5000。
## 测试
```
pytest
```
这些测试特意证明了正反两方面:
- 存在漏洞的 SQLi 允许绕过登录;
- 修复后的 SQLi 会拒绝相同的 payload;
- 存在漏洞的 XSS 会渲染原始 HTML;
- 修复后的 XSS 会对输出进行转义并发送 CSP;
- 存在漏洞的上传功能会接受 HTML 文件;
- 修复后的上传功能会拒绝危险或类型不匹配的文件;
- 存在漏洞的身份验证会接受 URL 中的凭据;
- 修复后的身份验证使用 POST、bcrypt 和 session;
- 存在漏洞的 IDOR 会泄露其他用户的个人资料;
- 修复后的 IDOR 会返回 `403`。
## 截图
截图存储在 `docs/screenshots/` 中:
- 桌面端和移动端的 dashboard 视图;
- 存在漏洞的 SQLi 绕过登录和修复后的拦截登录;
- 存在漏洞的和修复后的 XSS 搜索页面;
- 上传验证错误;
- 修复后的 IDOR `403`。
## 结构
```
app/
main.py
templates/
static/
modules/
sqli/
vulnerable/
fixed/
writeup.md
tests/
xss/
upload/
auth/
idor/
docs/
screenshots/
security-notes.md
```
## 安全提示
这些存在漏洞的模块是故意设计得不安全的。请在本地或隔离环境中运行此项目。请勿将其部署到公共互联网上。
标签:Docker, Flask, Python, Web安全, 安全教育, 安全监控, 安全规则引擎, 安全防御评估, 无后门, 漏洞靶场, 蓝队分析, 请求拦截, 逆向工具, 防御检测