在IPB v1.31中整合reCAPTCHA

软件与互联网技术
Admin
Advanced Member
Posts: 89
Joined: Thu May 13, 2004 11:56 am

在IPB v1.31中整合reCAPTCHA

Post by Admin »

在论坛等交互式网站程序中要防灌水机器人是一件很累人的事儿,有时甚至是一件让管理员欲哭无泪的工作。

不过目前多数主流论坛程序的新版本都内置了reCAPTCHA——一个由卡内基梅隆大学开发的可用于反互联网垃圾信息的技术,如VBB、IPB、PHPBB等,这使网站管理员得以将对付垃圾信息的任务交给系统自动完成,且效率颇高。

对于一些较早版本的论坛、博客程序,通常一是采用reCAPTCHA提供的免费插件来增加这样的功能,二是自己动手,手工修改相关的程序,使老程序焕发新颜。IPB是英国人Matt开发出的一款效率较高的论坛程序,直到2.3.6版才开始提供内置的reCAPTCHA验证,对于较早的、但也是最后一个可免费使用的1.31版来说,找不到任何官方提供的插件,因此只能自己动手进行修改了。以下是我翻译并加注的一篇教程。

要完成对IPB1.31版本的修改,一共涉及到三个文件:一个是从reCAPTCHA官方网站获取的库文件recaptchalib.php,另两个是IPB安装包中有关注册界面的文档(分别是Register.php和skin_register.php,因该修改只是在用户注册界面增加anti-spam机制,因此其它部分,诸如回贴验证、用户信息更改验证等有关的文件均不进行处理)

可以在IPB安装包中或论坛服务器相关目录下找到需要修改的文件:
/sources/Register.php
/Skin/*/skin_register.php ——此处星号在我的服务器相关目录下是S1

关于注册reCAPTCHA的帐号及获取KEY号就不讲了,这个大家很容易从其官方网站(http://recaptcha.net)免费注册后取得,一个是公钥(public key),一个是私钥(privat key)。会在对相关文件的修改中用到。方便起见,建议大家申请全域名型的KEY,例如如果申请的是forums.bizedu.net的KEY,就不能用于www.bizedu.net上,但反之则可行。

另外,到reCAPTCHA官站阅读并下载最新库文档,为 http://code.google.com/p/recaptcha/down ... lib-Latest。解开包后取主文件recaptchalib.php传至IPB的sources目录下,即与Register.php同目录。

下面开始修改Register.php

在该文件中查找到以下代码

Code: Select all

function show_reg_form($errors = "") {   
global $ibforums, $DB, $std;
在其后增加

Code: Select all

require_once('recaptchalib.php');   
$publickey = "..."; // 省略号处填写你从官方申请到的公钥
接着查找以下代码

Code: Select all

if ($ibforums->vars['bot_antispam'] == 'gd')
{
$this->output = str_replace( "<!--{REG.ANTISPAM}-->", $this->html->bot_antispam_gd( $regid ), $this->output );
}
else if ($ibforums->vars['bot_antispam'] == 'gif')
{
$this->output = str_replace( "<!--{REG.ANTISPAM}-->", $this->html->bot_antispam( $regid ), $this->output );
}
此后增加

Code: Select all

$this->output = str_replace( "<!--{REG.RECAPTCHA}-->", recaptcha_get_html($publickey), $this->output );
接着继续查找以下代码:

Code: Select all

function create_account()
{
global $ibforums, $std, $DB, $print, $HTTP_POST_VARS;
这段后加的内容比较多,尤其注意这里换上的KEY是不同之前的私钥

Code: Select all

require_once('recaptchalib.php');
$privatekey = "..."; // 此处省略号请更换为你在reCAPTCHA官方网站获取的私钥
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
以下是在Register.php文件中修改的最后一部分,也是程序对reCAPTCHA代码进行验证的部分

Code: Select all

//+--------------------------------------------
//| Check the reg_code
//+--------------------------------------------
其后增加:

Code: Select all

if (!$resp->is_valid)
{
$this->show_reg_form('err_reg_code');
return;
}
接着修改另一个文件skin_register.php

Code: Select all

<!--{REG.ANTISPAM}-->
上面这一段在该文件中出现两次,其后增加

Code: Select all

<!--{REG.RECAPTCHA}-->
然后上传这两个修改过的文件以及前文提到的recaptchalib.php文件,初步工作就完成了。

最后一步是自己在安装过程中发现的,也在这里提出来供可能遇到问题的各位参考:
1. 安装成功后,并没有在注册验证界面上发现reCAPTCHA模块
这个问题大多是因为IPB的模板未同步造成的,不一定会出现。如果发生的话,可以进入IPB管理后台,找到Skins & Templates - HTML Templates - Template Tools,然后运行该工具,即Run Tool,这样便可以在注册界面中看到模块显示出来。

2. 注册界面同时出现了reCAPTCHA模块和原有的图片验证模块
这可能是原代码中只是在ANTISPAM后增加了RECAPTCHA,如果去掉ANTISPAM的话,应当就只有RECAPTCHA模块起作用了;另外,更方便直接的方案是在管理后台的 System Settings - Security & Privacy 中将第一项的Bot Flood Control关闭。

欢迎转载,并请保留本文链接 http://forums.bizedu.net/index.php?showtopic=895

for IPB beyond v2, pls refer to http://ipbrc.sourceforge.net

Who is online

Users browsing this forum: ClaudeBot [Bot] and 0 guests