WordPress用户注册增加验证码禁止机器注册

前面说了使用接口验证邮箱地址的真实性,几乎可以排除 90%以上的错误邮箱地址注册。但是有个不好的地方就是,这个接口也不能保证 100%正确,仍然会有一部分的邮箱注册时会发生错误,这个概率相当的低。为了防止出现正常邮箱无法验证的情况,这里提供一种传统验证方式,增加验证码排除机器注册。老规矩,还是用大前端 DUX 主题为例,没办法,dux 的结构清晰,我也比较熟悉,用户也挺多。这个教程也适用于其它的 wordpress 主题,但是需要了解主题结构,别问我该写在哪儿,我也不知道。
WordPress用户注册增加验证码禁止机器注册-云模板首先看使用 PHP 的 GD 库生成验证码的代码:

  1. <?php
  2. /**
  3.  * 字母+数字的验证码生成
  4.  */
  5. // 开启session
  6. session_start();
  7. //创建画布
  8. $image = imagecreatetruecolor(100, 30);
  9. //为画布定义(背景)颜色
  10. $bgcolor = imagecolorallocate($image, 255, 255, 255);
  11. //填充颜色
  12. imagefill($image, 0, 0, $bgcolor);
  13. //设置验证码内容
  14. //定义验证码的内容
  15. $content = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
  16. //创建一个变量存储产生的验证码数据,便于用户提交核对
  17. $captcha = "";
  18. for ($i = 0; $i < 4; $i++) {
  19.     // 字体大小
  20.     $fontsize = 10;
  21.     // 字体颜色
  22.     $fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
  23.     // 设置字体内容
  24.     $fontcontent = substr($content, mt_rand(0, strlen($content)), 1);
  25.     $captcha .= $fontcontent;
  26.     // 显示的坐标
  27.     $x = ($i * 100 / 4) + mt_rand(5, 10);
  28.     $y = mt_rand(5, 10);
  29.     // 填充内容到画布中
  30.     imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
  31. }
  32. $_SESSION["captcha"] = $captcha;
  33. 
    
  34. //向浏览器输出图片头信息
  35. header('content-type:image/png');
  36. //输出图片到浏览器
  37. imagepng($image);
  38. //销毁图片
  39. imagedestroy($image);
  40. ?>

简单说一下,这里我使用的验证码背景是白色背景,所以验证码的字体颜色应该避免出现靠近 255 的数值(白色),以免看不见验证码。还有就是验证码应该尽量避免出现 0 与 o,l 与 1 等相似字符。

修改注册表单

dux 的注册表单在主题目录下的 js 文件的 signpop.js 文件中,我们为注册表单新增一项验证码,新增 HTML 如下:

  1. <h6>
  2.     <label for="inputEmail2"">验证码</label>
  3.     <div>
  4.     <input style="width: 190px;display: inline;" type="text" name="captcha" class="form-control" id="captcha" placeholder="验证码">
  5.     <img src="1.php"  onclick="this.src='1.php?'+new Date().getTime();" width="100" height="30">
  6.     </div>
  7. </h6>

其中 1.php 就是上面的验证码生成文件的网络地址,你可以自由命名。然后在 dux 的注册接口中新增一项验证验证码是否正确的判断,接口文件在 action 文件夹下的 log.php 文件中,代码如下:

  1. session_start();
  2. $captcha      = ( isset($_POST['captcha']) ) ? trim($_POST['captcha']) : null;
  3. if(strtolower($_SESSION["captcha"]) == strtolower($captcha)){
  4.         $_SESSION["captcha"] = "";
  5. }else{
  6. 	print_r(json_encode(array('error'=>1, 'msg'=>'验证码错误')));
  7. 	exit();
  8. }

这段验证代码应该写在 signup 注册动作中,建议写在登陆验证后面。到此为 dux 主题用户注册新增验证码验证的教程就结束了,主要使用了 GD 库生成图片以及 PHP 的 session 存储验证码信息,需要的可以加上哟。上面的验证码,我只做了简单处理,没有加背景干扰与干扰线等,需要的可以加上,代码如下:

  1. //设置背景干扰元素
  2. for ($$i = 0; $i < 200; $i++) {
  3.     $pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
  4.     imagesetpixel($image, mt_rand(1, 99), mt_rand(1, 29), $pointcolor);
  5. }
  6. 
    
  7. //设置干扰线
  8. for ($i = 0; $i < 3; $i++) {
  9.     $linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
  10.     imageline($image, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29), $linecolor);
  11. }

这段代码,放在上面生成验证码图片的代码中,$_SESSION[“captcha”] = $captcha;这句代码之后即可。

原创文章,作者:DavidWu,如若转载,请注明出处:https://www.davidwu.net/archives/94895

WordPress安全防护插件
服务项目 服务内容 收费标准(元)
开发定制 WordPress主题/插件开发定制 (以最终需求为准)
主题/插件汉化 汉化团队WordPress主题/插件,翻译率95% (以标的主题/插件的句子数量为准)
服务器环境配置 基于您现有服务器,搭建配置网站运行环境,结合我们多年来实战经验,可完美支持WordPress等PHP程序运行,并配置伪静态规则、优化目录权限等问题。服务器我们强烈推荐使用Linux系统。 100元/次
网站托管 若贵站目前尚无技术人员,无法完成服务器环境配置,可选择我们的网站托管服务,直接交付正常运行的WordPress站点,并且无需担心服务器的后续维护工作,一切都由我们来帮您完成。 标配套餐:1000元/年/站点 高配套餐:联系客服获取
网站加速优化 从服务器后端配置优化到WordPress数据库缓存、前端页面缓存、JS和CSS压缩合并,全方位优化网站加载速度,实现秒开。(此服务仅针对(云)服务器/VPS) 500元/次(仅站内优化200元/次)
主题配置 本站所有主题均支持,可快速实现,若有任何问题可以咨询客服解决,若您希望我们提供配置服务,可选购此服务。 英文主题安装 60元/次 汉化主题安装 30元/次
HTTPS配置 HTTPS已经不断普及,并且有着更高的安全性以及SEO上的优待。该服务收取的为服务费,SSL证书产生的费用请自行承担。 100元/次
网站搬家 迁移网站所有文件和数据库信息、网站相关配置的调整、以及迁移中的疑难问题故障排除。 标准收费:500元/次 若网站数据量大,需协商
网站运维 提供整站的运维服务,保证网站正常运行。包含:网站故障定位及排除、网站数据备份和恢复、网站攻击及木马等问题的处理等 标准收费:2000元/年 IP 5000以上需协商

发表评论

电子邮件地址不会被公开。 必填项已用*标注

51建站客服微信二维码
点击这里购买