HACK-OLYTE/CTFD-Attempts-Remover
GitHub: HACK-OLYTE/CTFD-Attempts-Remover
CTFd 平台插件,让参赛队伍直接在界面中申请重置挑战尝试次数,管理员可通过仪表盘集中审批并自动扣分,替代手动沟通流程。
Stars: 1 | Forks: 1
# CTFD-Attempts-Remover
**CTFD-Attempts-Remover** 是一个 [CTFd](https://ctfd.io) 插件,允许团队直接从 CTFd 界面针对特定挑战申请**重置尝试次数**——不再需要通过私信或在 Discord 上呼叫来申请重置!
## V4 更新内容
- **数据库重构** — 支持时区的时间戳,具有正确级联行为的外键约束,以及针对所有频繁查询列的性能索引
- **新模型** — `UnblockLog` 和 `SingleAttemptLog` 现在会记录每个管理员操作(谁批准、哪个团队、哪个挑战、应用的扣分)及完整的审计跟踪
- **分页日志 API** — `/unblock_logs` 现在返回分页结果,以处理大量历史记录而不会出现性能问题
- **新端点** — `/stats` 用于仪表盘计数,`/deny` 用于在不批准的情况下明确拒绝待处理请求
- **消除 N+1 查询** — 所有管理员视图现在都使用批量查询(每种数据类型单次 SQL 查询),而不是按团队/挑战进行循环查询
- **Discord 改进** — 指数退避重试逻辑(最多 3 次尝试)、速率限制处理(遵守 `retry_after`),以及在批准解封时发送新通知(不仅限于请求时)
- **前端重写**(`settingsremover.js`) — 完整的 IIFE 模式、集中式 API 助手、响应缓存(60 秒 TTL)、防抖 MutationObserver 以及命名空间化的 CSS,以防止与其他插件冲突
- **改进的输入验证** — 根据主机白名单验证 webhook URL,将角色 ID 验证为 17-20 位的 Discord snowflake,所有扣分字段均在服务端进行边界检查
- **`config.json` 已更新** 以反映 v4 结构和新的配置项
## V3 更新内容
- **多语言 i18n 系统**(法语 / 英语)
- **代码安全强化** — 修复 CSRF、针对 Discord webhook 的 SSRF 保护、输入验证
- **UI 改进** — 全面支持 CTFd 的暗色 / 亮色模式以及其他样式增强
- **Discord 通知** — 每当团队提交解封请求时,都会向可配置的 Discord webhook 发送消息,可通过插件的管理面板进行管理
## 主要功能
- **内置解封请求** — 团队可以提交请求,以移除其在特定挑战上的失败尝试记录。
- **完全解封或单次尝试** — 团队可以在完全重置(移除所有失败尝试记录)或增加一次额外尝试之间进行选择,每种方式都有各自可配置的扣分惩罚。
- **挑战排除** — 管理员可以将某些挑战排除在解封系统之外。
- **被封禁挑战高亮** — 被锁定的挑战会在挑战板上进行视觉标记(可选)。
- **拒绝请求** — 管理员可以在不批准的情况下明确拒绝请求。
- **可配置的惩罚系统**:
- **固定扣分** — 解封时扣除固定分数。
- **比例扣分** — 扣除挑战分数的百分比。
- **完整的审计跟踪** — 每次解封操作都会记录执行操作的管理员、团队、挑战、扣分数值和时间戳。
- **直观的管理界面**:
- 带有实时计数器的仪表盘(被封禁的团队、待处理请求、总解封次数)。
- 集中查看所有被封禁的团队及其待处理请求,按请求类型进行颜色编码。
- 一键批准或拒绝。
- 自动应用扣分惩罚。
- 带有测试按钮的 Discord webhook 配置。
- 分页的解封历史记录。
## 为什么要使用这个插件?
有了这个插件,团队不再需要通过 Discord 或发送私信来请求重置尝试次数。他们可以直接从 CTFd 平台提交请求,而管理面板提供了一个完整的管理仪表盘,用于审查请求、批准或拒绝操作以及一键应用惩罚。
每个人都能从中受益:玩家可以专注于比赛,而组织团队则可以从重复的手动任务中解脱出来。
## 安装说明
1. 将此代码库克隆到您的 `CTFd/plugins` 文件夹中:
cd /path/to/CTFd/plugins
git clone https://github.com/HACK-OLYTE/CTFD-Attempts-Remover.git ctfd-attempts-remover
2. 重启您的 CTFd 实例以加载插件。
## 配置
前往 `/plugins/ctfd-attempts-remover/admin`(可从 CTFd 管理面板中的链接访问)来进行以下操作:
| 部分 | 描述 |
|---|---|
| **惩罚配置** | 选择完全解封的固定或比例惩罚 |
| **额外尝试配置** | 启用 / 禁用单次尝试功能并设置其成本 |
| **被封禁团队** | 查看所有被封禁的团队、查看待处理请求、批准或拒绝 |
| **排除的挑战** | 标记无法解封的挑战 |
| **历史记录** | 包含管理员、团队、挑战、类型和扣分的分页解封操作日志 |
| **Discord 通知** | 配置 webhook URL 和可选的角色呼叫 |
演示视频:
https://github.com/user-attachments/assets/90450a01-5411-4d25-ae22-b18eca2f2ff0
## API 端点
| 方法 | 路由 | 权限 | 描述 |
|---|---|---|---|
| GET | `/api/v1/attempts_remover/config` | 用户 | 获取当前插件配置 |
| GET | `/api/v1/attempts_remover/blocked` | 用户 | 获取当前团队被封禁的挑战 |
| GET | `/api/v1/attempts_remover/my_requests` | 用户 | 获取当前团队待处理的解封请求 |
| GET | `/api/v1/attempts_remover/my_single_requests` | 用户 | 获取当前团队待处理的单次尝试请求 |
| GET | `/api/v1/attempts_remover/my_history` | 用户 | 获取当前团队的解封历史记录 |
| POST | `/api/v1/attempts_remover/request_support` | 用户 | 提交完全解封请求 |
| POST | `/api/v1/attempts_remover/request_single_attempt` | 用户 | 提交单次尝试请求 |
| GET | `/api/v1/attempts_remover/admin_blocked` | 管理员 | 获取所有挑战中所有被封禁的团队 |
| GET | `/api/v1/attempts_remover/stats` | 管理员 | 获取仪表盘计数 |
| GET | `/api/v1/attempts_remover/unblock_logs` | 管理员 | 获取分页的解封历史记录 |
| POST | `/api/v1/attempts_remover/admin_unblock` | 管理员 | 批准完全解封 |
| POST | `/api/v1/attempts_remover/admin_grant_single_attempt` | 管理员 | 批准额外的一次尝试 |
| POST | `/api/v1/attempts_remover/admin_deny_request` | 管理员 | 拒绝待处理的请求 |
| GET/POST | `/api/v1/attempts_remover/discord_config` | 管理员 | 获取 / 设置 Discord webhook 配置 |
| POST | `/api/v1/attempts_remover/discord_test` | 管理员 | 向 Discord 发送测试消息 |
| GET/POST | `/api/v1/attempts_remover/excluded_challenges` | 管理员 | 列出排除的挑战 |
| POST | `/api/v1/attempts_remover/exclude_challenge` | 管理员 | 排除某个挑战 |
| POST | `/api/v1/attempts_remover/include_challenge` | 管理员 | 重新包含被排除的挑战 |
## 环境要求
- CTFd ≥ v3.x
- 兼容 Docker 和本地安装。
- 启用了 JavaScript 的现代浏览器。
- 在 CTFd 中启用团队模式(解封系统是基于团队的)。
## 支持
如有任何问题或疑问,请提交一个 [issue](https://github.com/HACK-OLYTE/CTFD-Attempts-Remover/issues) 或通过 Hack'olyte 协会网站联系我们:[联系方式](https://hackolyte.fr/contact/)。
## 许可证
本插件采用 [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/) 许可。
未经 Hack'olyte 协会事先授权,请勿从任何 HTML 文件中移除页脚。
标签:Awesome, CTFd, CTF平台, Python, Syscall, Web开发, 后端开发, 多线程, 审计日志, 插件, 数据可视化, 无后门, 系统管理, 请求拦截, 调试辅助, 逆向工具