Chanindhu/flask-web-security-lab
GitHub: Chanindhu/flask-web-security-lab
基于 Flask 构建的本地 Web 安全教学实验项目,通过电商应用演示 CSRF 和 DOM-based XSS 漏洞的攻击与防御。
Stars: 1 | Forks: 0
# Flask Web 安全实验
一个使用 Flask 和 SQLite 构建的本地 Web 安全演示项目。该项目使用一个小型电子商务应用来演示两种常见 Web 安全问题的易受攻击行为和缓解措施:
- 跨站请求伪造 (CSRF)
- 基于 DOM 的跨站脚本 (DOM-based XSS)
该应用程序专为受控的本地演示而设计。请勿将其部署为生产系统。
## 评审者快速浏览
- **演示内容:** 安全与易受攻击的 Flask 实现、漏洞复现以及实用的修复说明。
- **建议优先检查的文件:** [`docs/vulnerability-analysis.md`](docs/vulnerability-analysis.md)、[`docs/remediation-notes.md`](docs/remediation-notes.md) 和 [`src/vulnerable-shop/app.py`](src/vulnerable-shop/app.py)。
- **如何验证:** 在本地运行易受攻击和已缓解模式,然后使用 [`exploits/`](exploits/) 中的 CSRF 和 DOM-XSS 示例。
## 功能
- Flask 店铺前台,包含注册、登录、产品列表、购物车、结账、出售和账户删除流程
- 基于 SQLite 的产品、用户、订单和订单项数据
- 用于安全演示的易受攻击模式
- 使用 CSRF token、SameSite cookie、更安全的 DOM 渲染以及基本 Content Security Policy 的缓解模式
- 本地 CSRF 漏洞利用页面和 DOM-XSS payload 示例
- 关于架构、漏洞、缓解措施和演示流程的文档
## 证明与审查证据
| 证据 | 检查位置 | 证明了什么 |
|---|---|---|
| 漏洞分析 | [`docs/vulnerability-analysis.md`](docs/vulnerability-analysis.md) | CSRF 和 DOM-XSS 风险得到了解释,而不仅仅是列出名称。 |
| 修复说明 | [`docs/remediation-notes.md`](docs/remediation-notes.md) | 缓解措施的选择已记录在案,并与易受攻击的行为相关联。 |
| 演示指南 | [`docs/demo-guide.md`](docs/demo-guide.md) | 评审者可以在本地复现易受攻击和已缓解的流程。 |
| 构建/运行指南 | [`docs/build-and-run.md`](docs/build-and-run.md) | 本地设置与概述分开记录。 |
| 漏洞利用示例 | [`exploits/`](exploits/) | 仓库包含用于安全演示的受控概念验证输入。 |
| 运行脚本 | [`scripts/run-vulnerable.sh`](scripts/run-vulnerable.sh) 和 [`scripts/run-mitigated.sh`](scripts/run-mitigated.sh) | 这两种安全模式可以被特意启动。 |
| Flask 源码 | [`src/vulnerable-shop/app.py`](src/vulnerable-shop/app.py) | 易受攻击和已缓解的实现在代码中可见。 |
## 项目结构
```
flask-web-security-lab/
|-- src/
| `-- vulnerable-shop/
| |-- app.py # Flask app with vulnerable/mitigated modes
| |-- init_db.py # Local SQLite setup
| |-- requirements.txt
| |-- static/ # JavaScript/CSS assets
| `-- templates/ # Flask templates
|-- exploits/
| |-- csrf/ # CSRF proof-of-concept pages
| `-- dom-xss/ # DOM-XSS payload examples
|-- scripts/
| |-- run-vulnerable.sh
| `-- run-mitigated.sh
|-- docs/
| |-- architecture-notes.md
| |-- build-and-run.md
| |-- demo-guide.md
| |-- remediation-notes.md
| `-- vulnerability-analysis.md
|-- .gitignore
`-- README.md
```
## 快速开始
```
cd src/vulnerable-shop
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python init_db.py
```
运行易受攻击模式:
```
ENABLE_MITIGATIONS=0 python app.py
```
运行已缓解模式:
```
ENABLE_MITIGATIONS=1 python app.py
```
打开:
```
http://127.0.0.1:5000
```
## 本地演示说明
漏洞利用示例假定 Flask 应用运行在 `http://127.0.0.1:5000`。
CSRF 漏洞利用页面可以从单独的本地端口提供:
```
cd exploits/csrf
python3 -m http.server 8081
```
然后打开:
```
http://127.0.0.1:8081/cart-add-csrf.html
http://127.0.0.1:8081/account-delete-csrf.html
```
## 安全提示
本仓库仅用于本地课程作业、安全教育和作品集演示。易受攻击模式有意禁用了保护措施,以便能在 localhost 上安全地演示该行为。
标签:CSRF, Flask, SQLite, Web安全, XSS, 后端开发, 多模态安全, 安全实验靶场, 应用安全, 数据可视化, 漏洞情报, 漏洞演示, 蓝队分析, 逆向工具