Webhook
入口:「管理后台 → Webhook」。选择需要订阅的事件后,平台会以 JSON 请求向接收服务发送通知。
先配置目标白名单
在「系统管理」配置 webhook.whitelist。空列表拒绝创建目标,不是不限制。白名单匹配主机名、主机名加端口、IP 或 IP CIDR,不接受 URL 路径前缀:
Helm 初次部署写入 cbctf.webhook.whitelist;已有数据库通过系统管理更新。白名单在创建/修改 URL 时校验,不是对已有投递、DNS 解析结果和 HTTP 重定向的网络防火墙。
创建与启用
填写名称、目标 URL、方法、超时、重试次数、请求头,选择订阅事件并勾选启用。创建和编辑均支持启用开关。
事件名称和负载
在编辑窗口选择订阅事件,常见事件有:
- 用户:
register、login、oauth_login、update_user - 队伍:
create_team、join_team、leave_team - 题目:
init_challenge、reset_challenge、start_victim、stop_victim - 提交:
submit_flag - 公告:
create_notice、update_notice、delete_notice
没有 flag_correct、flag_wrong、first_blood 等独立 Webhook 事件,也没有比赛时间到达后自动产生的开始/结束通知。
实际负载只包含事件类型、来源 IP 和相关对象 ID:
models 的键依事件上下文变化。负载不包含 Flag 内容、解题正误、完整对象或事件成功状态,不应仅凭 submit_flag 就宣布解题成功。
可用配置示例
Slack、Discord 等通常要求自己的消息格式,需要接收服务将上述负载转换后再发送,不能直接把 CBCTF 的 JSON 当作聊天消息模板。
历史与重试
页面提供全局和单个 Webhook 的历史,展示成功状态、HTTP 响应码、耗时、错误及关联事件,不保存完整请求/响应正文。
网络错误、超时和非 2xx 响应会向任务队列返回失败,按 retry 重试;每次尝试分别记录历史。接收器应考虑重复投递。配置修改影响后续入队任务,已入队任务携带的是当时的目标配置。
