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, 后端开发, 插件, 无后门, 竞赛平台, 请求拦截, 调试辅助, 逆向工具, 选择题