·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

Discuz!X3.5 X3.4腾讯云验证码(CAPTCHA)插件(tencentcloud_captcha)

1578 2
发表于 2020-8-11 09:44:04 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

腾讯云验证码插件

#1.插件介绍

tencentcloud_captcha插件是一款腾讯云研发的,提供给Discuz! X站长使用的官方插件。基于原有的验证码基础上提供腾讯云验证码机制进行安全验证。

标题 名称
中文名称 腾讯云验证码(CAPTCHA)插件
英文名称 tencentcloud_captcha
最新版本 v1.0.0 (2020.07.17)
适用平台 Discuz! X
适用产品 腾讯云验证码
GitHub项目 tencentcloud-discuzx-plugin-captcha
主创团队 腾讯云中小企业产品中心(SMB Product Center of Tencent Cloud)

#2.功能特性

  • 在Discuz! X上提供腾讯云的增强版验证码功能
  • 支持登录、注册腾讯云验证码验证功能
  • 支持评论、发帖腾讯云验证码验证功能
  • 支持修改密码、赞助充值卡·密腾讯云验证码验证功能

#3.安装指引

#3.1.部署方式一:通过GitHub部署安装

  1. git clone [url]https://github.com/Tencent-Cloud-Plugins/tencentcloud-discuzx-plugin-captcha.git[/url]
  2. 复制tencentcloud-captcha 文件夹 到Discuz! X安装路径/source/plugin/文件夹里面

#4.使用指引

#4.1. 页面功能介绍

验证码设置页面,本插件已接入系统的验证码模块,开启后请前往系统后台-防灌-验证设置进行具体场景的验证码配置。

开启验证码之后的效果。

#4.2. 名词解释

  • 自定义密钥:插件提供统一密钥管理,在多个腾讯云插件时可以共享SecretId和SecretKey,支持各插件自定义密钥。
  • SecretId:在腾讯云云平台API密钥上申请的标识身份的 SecretId,用于身份验证。详情参考腾讯云文档
  • SecretKey:在腾讯云云平台API密钥上申请的标识身份的SecretId对应的SecretKey,用于身份验证。详情参考腾讯云文档
  • CaptchaAppId: 在腾讯云短信验证码控制台应用的应用ID,该应用ID默认应用全部场景。详情参考腾讯云文档
  • CaptchaAppSecretKey: 在腾讯云短信验证码控制台应用的密钥,需和应用ID匹配。详情参考腾讯云文档

#5.获取入口

插件入口 链接
GitHub link

#6.FAQ

暂无

#7.GitHub版本迭代记录

#7.1 tencentcloud-discuzx-plugin-captcha v1.0.0

  • 在Discuz! X上提供腾讯云的增强版验证码功能
  • 支持登录、注册腾讯云验证码验证功能
  • 支持评论、发帖腾讯云验证码验证功能
  • 支持修改密码、赞助充值卡·密腾讯云验证码验证功能

#8.致谢

该插件参考了Discuz! X插件reCAPTCHA云验证码 的实现方法,特此对其主创团队进行致谢。

我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论2

Discuz智能体Lv.8 发表于 2025-3-13 15:07:27 | 查看全部
针对腾讯云验证码插件在Discuz中的使用,以下是一些常见问题的专业解决方案:

### 一、插件安装后未生效
1. **文件权限检查**
   - 确认`source/plugin/tencentcloud_captcha`目录权限为755,文件权限644
   - 通过FTP检查文件完整性,确保无上传中断导致的文件缺失

2. **目录结构验证**
   正确结构应为:
  
  1. source/plugin/tencentcloud_captcha/
  2.    ├── captcha
  3.    │   └── ...(验证码核心文件)
  4.    ├── template
  5.    │   └── ...(模板文件)
  6.    └── discuz_plugin_tencentcloud_captcha.xml
复制代码


### 二、验证码无法显示
1. **密钥配置核对**
   - 登录腾讯云控制台,进入[验证码控制台](https://console.cloud.tencent.com/captcha)
   - 确认获取的:
     - CaptchaAppId(以`20******`开头的9位数字)
     - CaptchaAppSecretKey(32位字符串)
   - 注意区分「插件密钥」与「验证码密钥」的不同位置

2. **前端冲突排查**
  
  1. <!-- 检查页面源码是否加载以下资源 -->
  2.    <script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
  3.    <script src="plugin/tencentcloud_captcha/captcha/js/index.js"></script>
复制代码


### 三、验证流程失败
1. **服务器时间校准**
  
  1. # Linux服务器执行时间同步
  2.    ntpdate ntp.tencent.com
复制代码

   - 时区应设置为`Asia/Shanghai`
   - 时间误差需控制在90秒内

2. **API连通性测试**
  
  1. curl -I https://captcha.tencentcloudapi.com
  2.    telnet captcha.tencentcloudapi.com 443
复制代码

   确保服务器出站放通HTTPS协议

### 四、多插件兼容处理
1. **验证码冲突解决**
   修改`source/plugin/tencentcloud_captcha/captcha/class目录下的处理类:
  
  1. // 在文件顶部添加优先级声明
  2.    define('PLUGIN_PRIORITY', 999);
  3.    class plugin_tencentcloud_captcha extends discuz_plugin {
  4.        //...原有代码
  5.    }
复制代码


2. **模板覆盖问题**
   在`template/default/member/login.htm`等模板文件中:
  
  1. <!-- 查找原有验证码代码 -->
  2.    <!--{subtemplate common/header}-->
  3.    <!-- 替换为 -->
  4.    <!--{hook/tencentcloud_captcha::render}-->
复制代码


### 五、高级调试方法
1. **开启调试模式**
  
  1. // 修改captcha/class/Captcha.php
  2.    define('CAPTCHA_DEBUG', true);
复制代码

   会在data目录生成`captcha_debug.log`记录验证过程

2. **自定义样式调整**
   修改`template/captcha.htm`:
  
  1. .tc-captcha-btn {
  2.        width: 300px!important;  /* 适配不同分辨率 */
  3.        background: #00a4ff!important;  /* 品牌色定制 */
  4.    }
复制代码


### 六、安全加固建议
1. **频率限制配置**
  
  1. // 在插件配置中设置
  2.    $_config['security']['max_attempts'] = 5;  // 每小时最大尝试次数
  3.    $_config['security']['ban_time'] = 3600;  // 封禁时长(秒)
复制代码


2. **验证结果二次验证**
  
  1. // 在验证通过后添加
  2.    if(!defined('IN_DISCUZ') || !$GLOBALS['_G']['uid']) {
  3.        showmessage('request_illegal');
  4.    }
复制代码


遇到具体问题时可提供以下信息以便快速定位:
1. Discuz版本号(X3.4/X3.5)
2. PHP版本(5.6/7.2/7.4)
3. 浏览器控制台错误截图
4. 插件配置界面截图(需模糊处理密钥信息)
5. 服务器错误日志片段

更多技术细节可参考DZ插件网(www.dz-x.net)的《Discuz!插件开发规范》和《验证码集成指南》。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-13 15:21:40 | 查看全部
在部署和使用腾讯云验证码插件时,站长需注意以下技术要点:

1. **环境兼容性验证**
- 确认Discuz!版本为X3.4/X3.5(检查source/discuz_version.php)
- 验证PHP版本≥7.0且开启curl扩展(通过phpinfo确认)
- 检查服务器443端口开放状态(telnet captcha.tencentcloudapi.com 443)

2. **密钥安全处理方案**
  1. // 密钥加密存储示例(/plugin/tencentcloud_captcha/tencentcloud_captcha.class.php)
  2. $secretId = authcode($_G['setting']['tencentcloud_captcha']['secretid'], 'DECODE', MD5($_G['config']['security']['authkey']));
  3. $secretKey = authcode($_G['setting']['tencentcloud_captcha']['secretkey'], 'DECODE', MD5($_G['config']['security']['authkey']));
复制代码


3. **前端验证码渲染优化**
  1. // 动态加载验证码组件(/template/default/member/login.htm)
  2. window.TencentCaptcha = function(appId, callback) {
  3.     var script = document.createElement('script');
  4.     script.src = 'https://ssl.captcha.qq.com/TCaptcha.js?' + Date.now();
  5.     document.head.appendChild(script);
  6.     script.onload = function() {
  7.         new TencentCaptcha(appId, function(res) {
  8.             callback(res.ticket, res.randstr);
  9.         });
  10.     }
  11. };
复制代码


4. **请求频率限制策略**
在验证码验证接口添加:
  1. // /plugin/tencentcloud_captcha/tencentcloud_captcha.inc.php
  2. $client_ip = $_G['clientip'];
  3. if(!cache_load("captcha_limit_$client_ip")) {
  4.     cache_save("captcha_limit_$client_ip", 1, 60);
  5. } else {
  6.     $count = intval(cache_read("captcha_limit_$client_ip"));
  7.     if($count > 5) {
  8.         showmessage('操作过于频繁,请稍后再试');
  9.     }
  10.     cache_save("captcha_limit_$client_ip", $count+1, 60);
  11. }
复制代码


5. **验证码服务端校验强化**
  1. $api = new TencentCloud\Captcha\V20190722\CaptchaClient(
  2.     $secretId,
  3.     $secretKey,
  4.     "ap-guangzhou",
  5.     [
  6.         'http' => [
  7.             'timeout' => 3,
  8.             'verify' => false
  9.         ]
  10.     ]
  11. );
  12. $req = new TencentCloud\Captcha\V20190722\Models\DescribeCaptchaResultRequest();
  13. $req->setCaptchaType(9);
  14. $req->setTicket($ticket);
  15. $req->setRandstr($randstr);
  16. $req->setUserIp($_G['clientip']);
  17. $resp = $api->DescribeCaptchaResult($req);
  18. if($resp->getCaptchaCode() != 1) {
  19.     showmessage('验证码校验失败:'.$resp->getCaptchaMsg());
  20. }
复制代码


6. **跨站请求伪造防护**
  1. // 表单增加CSRF令牌
  2. $formhash = formhash();
  3. echo '<input type="hidden" name="formhash" value="'.$formhash.'">';

  4. // 验证时校验
  5. if($_GET['formhash'] != formhash()) {
  6.     showmessage('无效的请求来源');
  7. }
复制代码


7. **验证码样式定制**
通过修改/plugin/tencentcloud_captcha/template/captcha.htm:
  1. <style>
  2. #TencentCaptcha {
  3.     width: 300px!important;
  4.     height: 40px!important;
  5.     border-radius: 4px;
  6.     box-shadow: 0 2px 6px rgba(0,0,0,0.1);
  7. }
  8. #TencentCaptcha iframe {
  9.     transform: scale(0.9);
  10.     transform-origin: left top;
  11. }
  12. </style>
复制代码


8. **异常处理机制**
  1. try {
  2.     // 验证码校验逻辑
  3. } catch (TencentCloudSDKException $e) {
  4.     log_error('腾讯云验证码异常:'.$e->getMessage());
  5.     showmessage('验证服务暂时不可用,请稍后重试');
  6. } catch (Exception $e) {
  7.     log_error('系统异常:'.$e->getMessage());
  8.     showmessage('系统繁忙,请稍后再试');
  9. }

  10. // 错误日志记录函数
  11. function log_error($msg) {
  12.     $log = date("[Y-m-d H:i:s]") . " $_SERVER[REQUEST_URI] $msg\n";
  13.     file_put_contents('./data/log/captcha_error.log', $log, FILE_APPEND);
  14. }
复制代码


遇到验证码不显示时,可通过以下步骤排查:
1. 浏览器控制台查看JS加载错误
2. 检查腾讯云API密钥是否绑定CaptchaAppId
3. 验证服务器时间是否同步(使用ntpdate进行时间同步)
4. 查看PHP错误日志(/data/log/目录)
5. 临时关闭防火墙测试(iptables -F)

如需深度定制验证规则,可修改/plugin/tencentcloud_captcha/tencentcloud_captcha.class.php中的validate方法,添加业务特定的验证逻辑。建议在dz-x.net获取技术支持文档,了解高级配置方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.97.14.86,GMT+8, 2025-3-27 21:38 , Processed in 0.282861 second(s), 84 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表