defojeco/ctfd-plugin-multichoice

GitHub: defojeco/ctfd-plugin-multichoice

为 CTFd 平台提供多选题挑战类型的插件,支持单选/多选、选项随机打乱、部分计分和卡片式 UI,弥补原生平台仅支持 flag 验证的不足。

Stars: 1 | Forks: 0

# CTFd MultiChoice 插件 适用于 CTFd 的多选题挑战类型 —— 支持单选和多选正确答案模式、随机打乱选项、部分计分,以及简洁的基于卡片的 UI。 目前 CTFd 没有类似的插件。标准版 CTFd 仅支持基于 flag 的挑战。 ## 功能 | 功能 | 描述 | |---|---| | 单选题 | 单选按钮模式 —— 只有一个正确答案 | | 多选题 | 复选框模式 —— 有多个正确答案 | | 选项随机打乱 | 随机顺序显示选项以防止作弊 | | 部分计分 | 为部分正确的答案 award 分数 | | 部分计分模式 | 基于百分比或每个正确选项的固定分数 | | 多个问题 | 一个挑战可以包含多个问题 | | 卡片 UI | 简洁的卡片布局,取代普通的复选框 | | 视觉反馈 | 提交后以绿色/红色高亮显示 | | 多语言 | 内置英语、俄语、西班牙语 | ## 环境要求 - CTFd 3.7.x - Python 3.8+ 无需额外的 pip 包。 ## 安装说明 ``` # 1. 将 plugin 文件夹复制到 CTFd 中 cp -r ctfd-plugin-multichoice /opt/ctfd/CTFd/plugins/ # 2. 重启 CTFd —— 数据库表会自动创建 docker restart ctfd ``` ## 创建挑战 1. 转到 **Admin → Challenges → New Challenge** 2. 选择 **multichoice** 类型 3. 添加答案选项并标记正确的选项 4. 选择模式:**single**(单选)或 **multiple**(多选) 5. 可选择开启 **shuffle** 和 **partial scoring** 6. 设置 `max_attempts` 以防止暴力破解 ## 答案存储格式 选项使用自定义格式存储在 `flagchoose` 字段中: ``` Option A|0§Option B|1§Option C|0§Option D|1 ``` - `§` —— 选项之间的分隔符 - `|1` —— 正确选项 - `|0` —— 错误选项 ## 部分计分 提供两种模式: **基于百分比** —— 得分 = `(已选正确答案数 / 总正确答案数) * 挑战分数` **每个问题的固定分数** —— 为每个正确选项设定分值;在挑战包含权重不同的多个问题时非常有用。 部分计分需要 `max_attempts > 0` 才有意义,否则参赛者可以通过勾选所有选项来进行暴力破解。 ## 兼容性 - CTFd 3.7.x - 可与 [ldap-plugin](https://github.com/defojeco/ctfd-ldap-plugin) 和 [ctfd-user-control-plugin](https://github.com/defojeco/ctfd-user-control-plugin) 配合使用 ## 开源许可 MIT
标签:CTFd, IPv6支持, Python, 后端开发, 插件, 无后门, 竞赛平台, 请求拦截, 调试辅助, 逆向工具, 选择题