给Discuz 5.X添加reCaptcha验证码
手里的一个论坛,运行的是Discuz 5.5,原先采用的是自带的动态验证码,结果没几天就有一堆的机器人进来到处爬。删帖删到手软,于是想到把验证码换成reCaptcha的,貌似能绕过这个的机器人不多。
Discuz并没有内置reCaptcha的支持,因此需要修改源文件,手动让其支持用reCaptcha认证。
首先去reCaptcha的官网申请public key和private key:https://www.google.com/recaptcha/admin/create
然后下载reCaptcha:http://recaptcha.googlecode.com/files/recaptcha-php-1.11.zip
下载下来解压,放到论坛的include里面,比如/bbs/include/recaptcha
。
然后修改register.php,让其支持reCaptcha:
找到include template('register');
,在其之前插入:
<!-- reCaptcha hack start -->
require_once dirname(__FILE__) . "/include/recaptcha/recaptchalib.php";
$recaptcha_publickey = 'input your public key here';
$recaptcha_html = recaptcha_get_html($recaptcha_publickey);
<!-- reCaptcha hack end -->
紧接着的下面,在}else {
后面输入
<!-- reCaptcha hack start -->
require_once dirname(__FILE__) . "/include/recaptcha/recaptchalib.php";
$recaptcha_privatekey = 'input your private key here';
$resp = recaptcha_check_answer ($recaptcha_privatekey,
$_SERVER['REMOTE_ADDR'],
$_POST['recaptcha_challenge_field'],
$_POST['recaptcha_response_field']);
if (!$resp -> is_valid) {
// What happens when the CAPTCHA was entered incorrectly
showmessage('验证码错误,请检查输入的验证码是否正确。');
}
<!-- reCaptcha hack end -->
至此register.php的修改就算完成了。不过为了让验证码显示出来,还得在模板里面加入相关语句,一般是修改/templates/default/register.htm
。
找到{lang passwd}
那句语句之前,插入:
<!-- reCaptcha hack start -->
<!--{if $recaptcha_html}-->
| <label for="recaptcha">reCaptcha *</label> | $recaptcha_html |
<!--{/if}-->
<!-- reCaptcha hack end -->
完成。后台刷新缓存,退出登录尝试注册下?