vinaykumarbharwal/CUHP-CTF-Platform
GitHub: vinaykumarbharwal/CUHP-CTF-Platform
一个面向团队的网络安全竞赛全栈夺旗(CTF)平台,提供完整的竞赛流程与实时排名。
Stars: 0 | Forks: 0
```markdown
# CUHP CTF 平台
CUHP CTF Platform 是一个面向团队的网络安全竞赛全栈夺旗(CTF)Web 应用。
## 项目名称
CUHP-CTF-Platform
## 功能特性
- 基于 JWT 的认证(注册/登录)
- 团队系统(创建团队、通过邀请码加入、最多 2 名成员)
- 按类别与难度浏览挑战
- 带速率限制的 Flag 提交
- 带决胜机制的实时排行榜
- 随时间变化的团队得分趋势图
- 点击展开团队行以在排行榜中查看成员名称
- 团队进度洞察(含分数细分与最近解题情况)
## 技术栈
- 后端:Node.js、Express、MongoDB、Mongoose
- 前端:React 18、Tailwind CSS、Recharts
- 工具:npm workspaces、concurrently、nodemon、react-scripts
## 前置条件
- Node.js LTS
- npm
- MongoDB(本地服务或 Atlas)
## 环境变量
### 后端([backend/.env](backend/.env))
```
MONGODB_URI=mongodb+srv://YOUR_USERNAME:YOUR_PASSWORD@YOUR_CLUSTER.mongodb.net/cuhp_ctf?retryWrites=true&w=majority
MONGODB_LOCAL_URI=mongodb://127.0.0.1:27017/cuhp_ctf
ALLOW_LOCAL_MONGO_FALLBACK=true
JWT_SECRET=your_super_secret_jwt_key_change_this
PORT=5000
```
MongoDB Atlas 快速设置:
1. 在 MongoDB Atlas 中创建一个集群。
2. 创建一个数据库用户。
3. 在网络访问(Network Access)中添加你的 IP 地址(测试环境可添加 0.0.0.0/0)。
4. 复制 SRV 连接字符串并替换 `MONGODB_URI`。
5. 如果你在本地开发且不使用 Atlas,请留空 `MONGODB_URI` 并使用上述本地回退值。
### 前端([frontend/.env](frontend/.env))
```
REACT_APP_API_URL=http://localhost:5000/api
```
## 安装
从项目根目录开始:
```
npm install
```
或使用工作区安装脚本:
```
npm run install:all
```
## 运行(开发模式)
默认启用实时重载:
- 前端使用 React Fast Refresh。
- 后端使用 legacy watch 模式的 nodemon,因此 API 变更会自动重启服务。
### 选项 A:从根目录同时运行
```
npm run dev
```
如果 `npm` 未被识别的 Windows 回退方案:
```
& "C:\Program Files\nodejs\npm.cmd" run dev
```
### 选项 B:分别运行
```
cd backend
npm run dev
```
```
cd frontend
npm start
```
## 初始化题目数据
```
npm run seed
```
## 应用地址
- 前端:http://localhost:3000
- 后端 API:http://localhost:5000/api
## API 概览
- `POST /api/auth/register`
- `POST /api/auth/login`
- `POST /api/teams/create`
- `POST /api/teams/join`
- `GET /api/teams/my/team`
- `GET /api/challenges`
- `POST /api/submit`
- `GET /api/leaderboard`
- `GET /api/graph/my-team`
- `GET /api/graph/team/:teamId`
- `GET /api/graph/all-teams`
完整的 API 详情,请参见 [docs/API.md](docs/API.md)。
## 项目结构
```
CUHP-CTF-Platform/
├── backend/
├── frontend/
├── database/
├── docs/
├── docker/
└── README.md
```
## 常见问题排查
- MongoDB Atlas 连接失败:
- 验证 `MONGODB_URI` 中的用户名/密码。
- 确保集群在 Atlas 网络访问中允许你的 IP。
- 确认数据库用户具有 readWrite 权限。
- 如果出现 `querySrv ECONNREFUSED`,请尝试使用非 SRV 的 `mongodb://...` URI 并显式指定分片主机。
- 当 Atlas 不可达时,后端会回退到 `MONGODB_LOCAL_URI`(需设置 `ALLOW_LOCAL_MONGO_FALLBACK=true`)。
- 如使用回退模式,请启动本地 MongoDB(`mongod --dbpath ` 或 `brew services start mongodb-community`)。
- 前端无法访问后端:
- 确保后端正在运行且 `REACT_APP_API_URL` 正确。
- 注册失败:
- 使用唯一的用户名和邮箱。
- 密码至少为 6 个字符。
- 检查 Toast 消息以获取后端具体错误。
- 登录显示“Invalid credentials”:
- 确保使用账户邮箱(而非用户名)和正确密码。
- 如果使用旧数据,请在重启后端后登录一次,以便自动升级明文凭据。
- 无效/过期令牌:
- 在浏览器中清除 localStorage 并重新登录。
- 创建团队运行时错误(`Cannot read properties of undefined (reading '0')`):
- 拉取前端最新更改并强制刷新浏览器(`Ctrl+F5`)。
## Git 忽略
仓库已忽略主要生成的与本地专用文件,包括:
- `node_modules/`
- 根目录、backend 与 frontend 中的 `.env` 文件
- 构建输出文件夹(如 `build/`、`dist/`、`out/`)
- 日志、缓存、编辑器设置与上传工件
本次更新无需更改 `.gitignore`。
## 许可证
MIT
```
标签:Express, GNU通用公共许可证, JWT认证, MITM代理, MongoDB, Mongoose, Node.js, NPM Workspaces, React, Recharts, SOC Prime, Syscall, Syscalls, Tailwind CSS, Web开发, 全栈, 分数图表, 前端, 后端, 团队协作, 团队进度, 夺旗赛, 实时排行榜, 实时更新, 开发工具, 挑战分类, 比赛平台, 点击展开, 率限制, 环境变量, 网络安全竞赛, 自定义脚本, 计分系统