Discuz!插件 阿里云ESA AI验证码
将阿里云ESA AI验证码接入Discuz!,为用户注册、登录、找回密码、发帖、回复及帖子点评等场景提供人机验证,有效降低机器注册、撞库登录和垃圾内容提交风险。
目前阿里云ESA的AI验证码是免费提供
站长们可以享受阿里云顶级免费风控防护能力
ESA的AI验证码免费期限以阿里云官方公布为准
阿里云ESA AI验证码插件通过Discuz!原生插件接口,将阿里云ESA AI验证能力接入论坛常用业务场景,无需修改系统文件和模板文件。
插件支持嵌入式与弹出式两种验证方式,可根据论坛模板和使用场景灵活选择。验证通过后自动继续原有提交操作,尽量保持Discuz!原生操作流程和页面样式。
主要功能:
-支持用户注册验证
-支持普通登录、顶部登录及弹出层登录验证
-支持找回密码验证
-支持发表主题和快速发帖验证
-支持发表回复和快速回复验证
-支持帖子点评弹出层验证
-支持嵌入式与弹出式验证码
-支持自定义嵌入式组件宽度
-支持设置弹出式验证按钮颜色
-支持开启/关闭未验证提示以及提示样式和区域
-支持中国内地和新加坡验证码地域
-支持一次性通行票据及有效期控制
-支持ESA回源密钥校验,降低绕过ESA直接访问源站的风险
-支持调试日志,便于排查验签及提交问题
-支持Discuz!X3.4、X3.5和X5.0独立兼容版本
安全说明
插件采用服务端验签和一次性通行票据机制。验证票据使用后立即失效,并受到有效期、会话及业务场景限制,减少重复使用和跨场景复用风险。
必须配合阿里云ESA的空Token拦截规则与回源请求头规则使用,并妥善保管回源密钥。
使用前准备
使用本插件前,需要先在阿里云ESA控制台创建AI验证码规则,并取得:
-ESA身份标
-ESA场景ID
-验证码地域
-回源密钥(插件后台自带生成地址)
启用插件前,请关闭Discuz!管理中心“安全→验证设置”中的原生验证码功能,避免两套验证码同时启用产生冲突。
调试日志
启用调试日志后,日志保存在:
`source/plugin/fjxiaoyi_esacaptcha/data/log/`
日志必须登录网站服务器,通过宝塔文件管理器、SSH或其他服务器管理工具查看,插件后台不提供在线日志查看功能。
调试日志仅建议在排查问题时开启,问题解决后请及时关闭。
兼容版本-Discuz!X3.4专用版本
-Discuz!X3.5专用版本
-Discuz!X5.0专用版本
请根据论坛实际版本选择对应的插件分支安装,不要跨版本混用。
免责声明本插件为第三方开发插件,并非阿里云官方产品。使用本插件需要自行开通并正确配置阿里云ESA AI验证码服务,相关服务能力、使用限制及费用以阿里云官方说明为准。
- 完成 Discuz! X5.0 适配,支持 UTF8SC、UTF8TC 编码。
- 优化 PHP 8 环境兼容性。
- 修复触屏版注册、登录及找回密码页面验证码图片不显示的问题。
- 修复电脑版部分登录、注册及发帖页面点击验证无响应的问题。
- 修复验证弹层关闭按钮失效、弹层遮挡及移动端显示超出边界的问题。
- 优化嵌入式验证码宽度及自适应布局。
- 验证通过后不再自动提交,由用户确认后再次点击业务按钮提交。
- 新增未验证提交提示,覆盖注册、登录、找回密码、发表主题、发表回复及帖子点评。
- 支持后台自定义提示开关、提示文字、显示位置、颜色和样式。
- 优化验证按钮状态,弹出验证层时不再消失。
- 验证成功状态精简为“验证通过”,避免在登录浮层中显示不完整。
- 修复其他已知问题,提升电脑版和触屏版的稳定性。
站点开通阿里云EAS,请查看下发接入以及相关说明:
目前阿里云ESA有免费版,备案的域名支持全球免费CDN加速。
相关站点解析等问题,如果您是新手,也可以通过阿里云的工单咨询在线客服。
当你配置完站点ESA解析后,可以按照下方步骤进行AI验证码的配置
第一步:在阿里云 ESA 创建 AI 验证码规则
登录阿里云控制台,进入 「边缘安全 ESA」 后台。
在左侧菜单中找到:
AI 验证码 → 配置 → 新增规则
按照页面提示创建一条新的 AI 验证码规则。
其中需要特别注意 「需验签的接口」 配置。
请先进入 Discuz! 插件后台,复制插件提供的验签接口地址,然后填写到阿里云 ESA 后台对应位置。
插件验签接口为:
/plugin.php/fjxiaoyi_esacaptcha/verify
具体填写方式请参考下图。
重要:
规则保存后,系统会提示是否开启 「拦截空 Token」。
这里一定要选择 开启,否则可能导致验证码校验失效或被绕过。
第二步:填写场景 ID 和身份标识
AI 验证码规则创建完成后,在阿里云 ESA 后台找到对应规则。
复制以下两个参数:
- 场景 ID
- 身份标识
然后进入 Discuz! 插件后台,将这两个参数填写到对应位置并保存。
填写完成后,建议再次检查阿里云 ESA 后台:
「拦截空 Token」必须保持开启状态。
具体位置请参考下图。

第三步:创建 ESA 回源请求头规则
进入阿里云 ESA 后台:
站点管理 → 找到已经接入 ESA 的域名 → 点击进入站点
在右侧找到:
规则 → 轮换规则 → 修改请求头
进入后,将作用方向选择为:
ESA 到源站
然后点击:
新增规则
具体位置请参考下图。

第四步:设置匹配条件
规则名称可以自行填写,例如:
小蚁 ESA AI 验证码回源验证
规则内容选择:
自定义规则
首先添加第一个条件:
URL 路径 → 等于 → /plugin.php/fjxiaoyi_esacaptcha/verify
然后点击 「And」,继续增加第二个条件:
主机名 → 等于 → 选择您已经接入阿里云 ESA 的站点域名
最终规则需要同时满足两个条件:
条件 1:
URL路径 = /plugin.php/fjxiaoyi_esacaptcha/verify
并且
条件 2:
主机名 = 您当前配置的 ESA 站点域名
具体配置方式请参考下图。
第五步:添加回源安全请求头
在规则下方的 「则执行」 区域中,按照下面的参数填写:
类型: 静态
操作方式: 添加
请求头名称:
X-Fjxiaoyi-ESA-Origin
请求头值:
填写一个随机生成的 32 位字符串。
例如:a8F3kL9mP2xT7qW4nR6yH1cV5sD0zB8e(这个是示例,千万别用)
然后回到 Discuz! 插件后台,在:
ESA 回源密钥
一栏中填写完全相同的 32 位字符串。
特别注意
阿里云 ESA 中填写的:
X-Fjxiaoyi-ESA-Origin
请求头值,必须与插件后台的:
「ESA 回源密钥」
完全一致。
包括:
- 字母大小写
- 数字
- 字符顺序
只要有一个字符不同,插件都可能无法正常完成回源验证。
配置完成后请检查
全部设置完成后,建议再次确认以下 5 项:
- 需验签接口已经填写正确;
- 拦截空 Token已经开启;
- 场景 ID已经正确填写到插件后台;
- 身份标识已经正确填写到插件后台;
- 阿里云 ESA 的
X-Fjxiaoyi-ESA-Origin请求头值,与插件后台的 ESA 回源密钥完全一致。
以上全部确认无误后,在插件的接入状态标签里面找到“执行安全自检”,确保测试通过。即可开始测试 AI 验证码功能。(如下图)
第六步:启用阿里云ESA AI验证码
dz后台安全-验证设置-组件列表-验证码-编辑-启用阿里云ESA AI验证码