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开发, 全栈, 分数图表, 前端, 后端, 团队协作, 团队进度, 夺旗赛, 实时排行榜, 实时更新, 开发工具, 挑战分类, 比赛平台, 点击展开, 率限制, 环境变量, 网络安全竞赛, 自定义脚本, 计分系统