3zzozi/Demonstration-Platform
GitHub: 3zzozi/Demonstration-Platform
一个用于教学演示的 Web 应用,模拟 OAuth Token 盗窃与重放攻击,帮助学员直观理解身份认证中的安全风险。
Stars: 0 | Forks: 0
# 演示平台
## 教育演示 – OAuth Token 盗窃模拟
这是一个**安全、虚构的**演示平台,旨在用于教育目的,展示 OAuth access token 的工作原理以及被盗后会发生什么。
### ⚠️ 重要免责声明
- **这不是一个真实的平台** - 它不类似于任何真实的 OAuth 提供商(Google、GitHub、Microsoft 等)
- **这不是安全的代码** - 这里展示的模式经过了刻意简化,在生产环境中将是不安全的
- **这仅供教育用途** - 旨在帮助学生理解 OAuth 安全概念
## 本演示教授的内容
### 1. OAuth Access Token 如何工作
当你登录时:
1. 你提供凭据(用户名/密码)
2. 服务器验证它们并颁发一个 **access token**
3. 你使用此 token 访问受保护的资源
4. Token 会在短时间后过期(在此演示中为 60 秒)
### 2. Token 盗窃(可能出什么问题)
在演示中,当你登录时,服务器**有意将 token 保存到 `leaked_token.txt`** 以模拟:
- Token 存储在不安全的位置(未加密的 localStorage)
- Token 通过 XSS 攻击被拦截
- Token 在浏览器开发者工具中被记录
- Token 从不安全的移动应用中窃取
### 3. Token 重放攻击
如果攻击者获取了你的 token,他们可以:
- **在不知道你密码的情况下**访问受保护的资源
- 在 token 过期前使用它
- 冒充你访问服务器
## 项目结构
```
demonstration-platform/
├── server.py # Flask backend (OAuth simulation)
├── package.json # Frontend dependencies
├── next.config.js # Next.js configuration
├── tsconfig.json # TypeScript configuration
├── README.md # This file
└── app/
├── globals.css # Dark theme styles
├── layout.tsx # Root layout
├── page.tsx # Home (redirects to /login)
├── login/
│ └── page.tsx # Login page
└── profile/
└── page.tsx # Protected profile page
```
## 如何运行
### 前置条件
- 带有 pip 的 Python 3.x
- 带有 npm 的 Node.js 18+
### 步骤 1:启动后端 (Flask)
```
# 安装 Flask
pip install flask
# 运行 server
python server.py
```
服务器将在 `http://localhost:5001` 启动(如果端口被占用则为 5002/5003,可通过 PORT 环境变量配置)
### 步骤 2:启动前端 (Next.js)
在新终端中:
```
# 安装 dependencies
npm install
# 运行 development server
npm run dev
```
前端将在 `http://localhost:3000` 启动
### 步骤 3:打开演示
1. 在浏览器中打开 `http://localhost:3000`
2. 你将被重定向到登录页面
3. 使用演示凭据:
- **用户名:** `student`
- **密码:** `1234`
4. 点击“登录”进行登录
5. 查看你受保护的配置文件数据
6. 观察 token 倒计时
## 演示流程
### 正常流程(合法用户)
1. 用户使用凭据登录
2. 收到 access token(有效期为 60 秒)
3. 使用 token 访问 `/profile` 页面
4. 查看受保护的数据
5. Token 过期,用户必须重新登录
### 攻击流程(Token 盗窃模拟)
1. 用户登录(token 被保存到 `leaked_token.txt`)
2. 攻击者从文件中获取 token
3. 攻击者使用被盗的 token 访问 `/profile`
4. 攻击者在不知道密码的情况下查看受保护的数据
5. 这演示了**Token 重放攻击**
## 安全缓解措施(针对真实系统)
该演示展示了为什么生产系统需要:
1. **短生命周期的 token** - 减少攻击时间窗口
2. **Token 轮换** - 刷新 token 时使旧的 access token 失效
3. **安全存储** - httpOnly cookies,加密存储
4. **HTTPS/TLS** - 防止 token 被拦截
5. **Token 绑定** - 将 token 绑定到特定的设备/会话
6. **监控** - 检测异常的 token 使用模式
## 值得关注的文件
| 文件 | 用途 |
|------|---------|
| [`server.py`](server.py) | 带有 OAuth 模拟、token 存储和泄漏演示的 Flask 后端 |
| [`app/login/page.tsx`](app/login/page.tsx) | 发送凭据并接收 token 的登录页面 |
| [`app/profile/page.tsx`](app/profile/page.tsx) | 验证 token 并显示数据的受保护页面 |
| [`leaked_token.txt`](leaked_token.txt) | 登录时创建 - 模拟被盗的 token |
## API 端点
### POST /login
进行身份验证并接收 access token。
**请求:**
```
{
"username": "student",
"password": "1234"
}
```
**响应:**
```
{
"access_token": "abc123...",
"expires_in": 60,
"token_type": "Bearer"
}
```
### GET /profile
使用有效的 token 访问受保护的数据。
**请求头:**
```
Authorization: Bearer
```
**响应:**
```
{
"username": "student",
"role": "Researcher",
"protected_data": {...},
"token_info": {...}
}
```
## 许可证
这是一个仅供课堂教学使用的教育演示。不用于生产环境。
标签:API安全, CISA项目, Flask, JSON输出, OAuth, OAuth2.0, Streamlit, Token Replay, TypeScript, Web安全, XSS攻击模拟, 令牌窃取, 令牌重放攻击, 前端安全, 安全培训, 安全插件, 安全教育, 安全漏洞演示, 教育演示, 演示平台, 网络安全教学, 网络攻防, 自动化攻击, 蓝队分析, 访问控制, 身份验证安全, 逆向工具