ssaraf990/secure-trading-auth-system
GitHub: ssaraf990/secure-trading-auth-system
一个以安全为核心的股票交易模拟平台,演示多层身份验证、CSRF防护、速率限制和审计日志等OWASP安全最佳实践。
Stars: 0 | Forks: 0
# 🔐 TradeSecure
### 一个安全的股票交易模拟平台
[](https://python.org)
[](https://flask.palletsprojects.com)
[](https://sqlite.org)
[](https://owasp.org)
[](LICENSE)
*作为一个信息安全项目构建,演示了在实时股票交易平台上实现多层身份验证、暴力破解防护、CSRF 防御和安全交易授权。*
## 📌 概述
TradeSecure 是一个全栈 Web 应用程序,模拟了一个重点关注**应用层安全**的股票交易平台。它实现了 Zerodha 和 Groww 等真实交易平台使用的行业标准安全模式,包括多因素身份验证、交易 PIN (TPIN) 授权、速率限制、会话管理以及实时安全审计日志。
## ✨ 功能
### 🔐 安全层
| Feature | Description |
|---|---|
| **基于 Email OTP 的 2FA** | 密码登录后通过 Gmail SMTP 发送 TOTP 风格的 6 位 OTP |
| **TPIN 授权** | 每次交易前需要单独的 6 位交易 PIN — 使用 bcrypt 哈希,仿照 Zerodha 的 CDSL TPIN 设计 |
| **暴力破解防护** | 登录、OTP 和 TPIN 端点在 5 次失败后锁定 — 数据库记录 30–60 分钟的锁定 |
| **速率限制** | 所有 API 端点上基于 IP 的滑动窗口速率限制器(无需外部库) |
| **CSRF 保护** | 所有 POST 表单使用 Flask-WTF CSRF token;所有 JS `fetch()` 调用使用 `X-CSRFToken` header |
| **会话超时** | 15 分钟不活动自动登出,带有实时倒计时器 |
| **安全 Cookie** | `HttpOnly`, `SameSite=Lax` 会话 cookie 配置 |
| **安全审计日志** | 每次身份验证尝试、交易、锁定和异常都记录到结构化 JSON 日志文件中,并提供实时应用内查看器 |
### 📈 交易功能
| Feature | Description |
|---|---|
| **实时股价** | 通过 `yfinance` 获取实时价格,Finnhub API 作为备用,模拟数据作为最终备用 |
| **市价单与限价单** | 市价单以实时价格执行;限价单以用户指定价格执行 |
| **搜索任何代码** | 不限于固定的监视列表 — 搜索 yfinance 支持的任何股票代码 |
| **K 线图** | 仪表板上显示 30 天 OHLC K 线图 (Chart.js Financial + yfinance history) |
| **投资组合 P&L** | 每项持仓的未实现盈亏及随时间变化的净值图表 |
| **交易历史** | 完整的订单历史,包含订单类型、授权方式和金额 |
## 🏗️ 架构
```
tradesecure/
├── app.py # Main Flask application (routes, auth, security)
├── modules/
│ ├── stocks/
│ │ ├── stock_controller.py # yfinance + Finnhub price fetching, trade execution
│ │ └── stock_routes.py # /api/stock/* Blueprint
│ └── biometric/
│ ├── biometric_controller.py # WebAuthn challenge/response (mock)
│ └── biometric_routes.py # /api/biometric/* Blueprint
├── security/
│ ├── security_logger.py # Structured JSON event logger
│ └── threat_routes.py # /api/threats/* Blueprint
├── templates/ # Jinja2 HTML templates
├── security_logs/ # Auto-generated security event logs
└── auth_system.db # SQLite database (auto-created)
```
### 数据库表
```
users — credentials, lock status, TPIN hash
login_attempts — all auth attempts with IP + timestamp
otps — time-limited OTP codes
wallets — per-user INR balance
positions — current stock holdings
transactions — full trade history
tpin_attempts — TPIN failure tracking for lockout
portfolio_history — net worth snapshots for P&L graph
watchlist — per-user symbol watchlist
biometric_credentials — WebAuthn credential store
```
## 🔒 安全设计决策
### 为什么使用单独的 TPIN 而不是重用登录密码?
真实的交易平台 (Zerodha, Groww) 使用单独的交易 PIN,以便:
1. 仅泄露登录密码不足以执行交易
2. 交易授权因子可以独立进行速率限制和锁定
3. **深度防御** 原则 — 多个独立的屏障
### 暴力破解防护如何工作
三个独立的锁定系统,各自独立跟踪:
- **Login** — 15 分钟内 username+IP 失败 5 次 → 账户锁定 60 分钟
- **OTP** — 失败 5 次 → 账户锁定 60 分钟
- **TPIN** — 30 分钟内失败 5 次 → TPIN 锁定 30 分钟
### CSRF 保护
所有更改状态的表单都包含由 Flask-WTF 生成的 `csrf_token` 隐藏输入。JavaScript `fetch()` 调用通过 `base.html` 中的 fetch wrapper 自动附加 `X-CSRFToken` header。JSON API 端点被明确豁免,因为它们依赖于会话身份验证。
### 速率限制
自定义内存滑动窗口速率限制器(不需要 Redis)跟踪每个 IP 对每个端点的请求。限制:价格 API 30 请求/分钟,TPIN 验证 10 请求/分钟,市场数据 20 请求/分钟。
## 🚀 入门指南
### 前置条件
- Python 3.10+
- pip
### 安装
```
# 克隆 repository
git clone https://github.com/yourusername/tradesecure.git
cd tradesecure
# 安装 dependencies
pip install -r requirements.txt
# 设置 environment variables
cp .env.example .env
# 编辑 .env,填入你的 Gmail App Password 和随机 SECRET_KEY
```
### 配置 (`.env`)
```
SECRET_KEY=your-long-random-secret-key
EMAIL_ADDRESS=youremail@gmail.com
EMAIL_PASSWORD=your-16-char-gmail-app-password
DEV_PIN=123456
```
### 运行
```
python app.py
```
打开 [http://localhost:5001](http://localhost:5001)
### 首要步骤
1. 注册一个账户
2. 登录 — OTP 将发送到您的电子邮件(如果未配置电子邮件,则显示在终端中)
3. 转到导航栏中的 **TPIN** 并设置您的 6 位交易 PIN
4. 转到 **Trade** 并下您的第一个订单
## 📸 截图
| Login + 2FA | Dashboard + Candlestick | Trade with TPIN | Security Audit Log |
|---|---|---|---|
|  |  |  |  |
## 🛠️ 技术栈
- **Backend**: Python, Flask, SQLite
- **Auth**: Flask-WTF (CSRF), Werkzeug (password hashing), custom OTP + TPIN system
- **Data**: yfinance (live stock prices), Finnhub API (fallback)
- **Frontend**: Bootstrap 5, Chart.js + chartjs-chart-financial, Font Awesome
- **Security Logging**: Custom structured JSON logger
## 📄 许可证
MIT License — 详见 [LICENSE](LICENSE)。
Built with Flask · Secured with OWASP principles · Live prices via yfinance
标签:2FA, CISA项目, CSRF防护, Flask, HTTPS, meg, OTP, Python, SQLite, TPIN, Web安全, yfinance, Zerodha, 交易密码, 会话管理, 信息安全, 双因素认证, 后端开发, 实时行情, 审计日志, 教育演示, 无后门, 登录保护, 网络安全项目, 股票模拟交易, 蓝队分析, 逆向工具, 金融科技, 防暴力破解