在 WordPress 默认的登录页添加验证码
在 WordPress 默认的登录页添加验证码源代码,虽然 WordPress 也比较安全了,在国内基本在登录框里面都加入了验证码,方式机器人自动登陆然后发布垃圾内容,这段代码用到了两个滤镜函数。将以下代码加入到 functions.php 文件中即可。
添加验证码输入框
//登录页添加验证码输入框
function v_login(){
?>
<p><label for="vcode">验证码<input type="text" name="vcode" value="" size="20" class="input" tabindex="20" /></label></p>
<p>请输入下面图片上的字符,不区分大小写<br/><img src="https://www.wenjiangs.com/wp-content/themes/wenshuo/plugin/vCode.php" /></p>
<?
}
add_filter('wp_authenticate_user', 'vcode_v', 10, 2);
输入的时候验证验证码
//输入的时候验证验证码
function vcode_v($user, $username='', $password=''){
if (isset($_POST['wp-submit'])){
if(!($_POST['vcode'] == $_SESSION['VCODE'])){
remove_filter('authenticate', 'vcode_v', 20, 3);
$error = new WP_Error();
$error->add('incorrect_password', '<strong>错误</strong>:验证码不正确。');
return $error;
}
}
return $user;
}
add_filter('wp_authenticate_user', 'vcode_v', 10, 2);
add_action('login_form', 'v_login');
验证码函数
session_start();
//生成验证码图片
Header("Content-type: image/PNG");
$im = imagecreate(44,18); // 画一张指定宽高的图片
$back = ImageColorAllocate($im, 245,245,245); // 定义背景颜色
imagefill($im,0,0,$back); //把背景颜色填充到刚刚画出来的图片中
$vcodes = "";
srand((double)microtime()*1000000);
//生成4位数字
for($i=0;$i<4;$i++){
$font = ImageColorAllocate($im, rand(100,255),rand(0,100),rand(100,255)); // 生成随机颜色
$authnum=rand(1,9);
$vcodes.=$authnum;
imagestring($im, 5, 2+$i*10, 1, $authnum, $font);
}
$_SESSION['VCODE'] = $vcodes;
for($i=0;$i<100;$i++){ //加入干扰象素
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%70 , rand()%30 , $randcolor); // 画像素点函数
}
ImagePNG($im);
ImageDestroy($im);
注意 functions.php 文件的头部必须添加 session_start(),不然无法获取到验证码。
WordPress 中相关的登陆钩子函数和滤镜函数请访问:http://codex.wordpress.org/Function_Reference/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论