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安全, 安全教育, 安全监控, 安全规则引擎, 安全防御评估, 无后门, 漏洞靶场, 蓝队分析, 请求拦截, 逆向工具, 防御检测