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攻击模拟, 令牌窃取, 令牌重放攻击, 前端安全, 安全培训, 安全插件, 安全教育, 安全漏洞演示, 教育演示, 演示平台, 网络安全教学, 网络攻防, 自动化攻击, 蓝队分析, 访问控制, 身份验证安全, 逆向工具