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

Mr.Wu 773 0

如上图,wordpress 默认会给管理员发送新用户注册和修改密码的邮件提醒,人性化的时代,我不懂为什么wordpress一直不将这个功能改成可设置项,网上关于这个问题的解决方案是修改wordpress框架代码,去掉发送邮件的代码,我是坚决不改wordpress框架代码的,而且更新一次改一次,不麻烦么?

我一个小站都受不了每天这样的邮件提醒,我不知道那些大战是如何解决的,我可以肯定每天收到的新用户注册均为机器人注册,根本不是真实用户,那么注册毫无意义,因此今天抽空想了个笨办法解决这个问题.

思路:

  1. 像这种每天垃圾注册用户,都是机器人,是有人用软件批量扫描wordpress网站批量注册的.
  2. 如上图,我博客是有注册和登陆验证码的,然而并没有什么卵用,那么只有2种可能,一种是通过WP我不知道的接口无视验证码注册,第二种可能是人家软件自带验证码试别功能,给我试别了验证码.
  3. 基于上诉情况,我决定在给注册加一层验证码机制,2种验证码同时存在的情况下,能直接杜绝掉软件批量注册的可能,虽然如果想,还是可以批量注册,但是它那个软件肯定是批量的,因此不会特殊对待因为我而把软件改成双验证码,所以这个想法是可行的,除非,真的是利用wordpress 我不知道的无视验证码的注册接口批量注册.....不管如何,先试验一段时间效果.那么让我们开始把.

实现代码步骤:

我目前已经有一个图片验证码了,所以只需要在加一个验证码就行:

//WordPress新用户注册随机数学验证码
function add_security_question_fields() {

    //获取两个随机数, 范围0~9
    $num1=rand(0,10);
    $num2=rand(0,10);

    //最终网页中的具体内容
    echo "<p><label for='math' class='small'>真人识别:$num1 + $num2 = ? </label><input type='text' name='sum' class='input' value='' size='25'>"
    ."<input type='hidden' name='num1' value='$num1'>"
    ."<input type='hidden' name='num2' value='$num2'></p>";
}
add_action('register_form','add_security_question_fields');

add_action( 'register_post', 'add_security_question_validate', 10, 3 );
function add_security_question_validate( $sanitized_user_login, $user_email, $errors) {

    $sum=$_POST['sum'];//用户提交的计算结果
    switch($sum){

    //得到正确的计算结果则直接跳出
    case $_POST['num1']+$_POST['num2']:break;

    //未填写结果时的错误讯息
    case null:wp_die('<script>alert("错误:请输入真人识别结果!");window.history.go(-1);</script>');break;

    //计算错误时的错误讯息
    default:wp_die('<script>alert("错误:真人识别结果错误,请重试!");window.history.go(-1);</script>');}
}
add_action( 'add_security_question','register_form' );

将上面的代码添加到主题的 functions.php 文件末尾处即可.

效果图:

打赏
发表评论 取消回复
表情 图片 链接 代码

分享
微信
微博
QQ