给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 -->

完成。后台刷新缓存,退出登录尝试注册下?

本文参考了:http://www.yookoala.idv.hk/en/node/24