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开发, 后端开发, 多线程, 审计日志, 插件, 数据可视化, 无后门, 系统管理, 请求拦截, 调试辅助, 逆向工具