不过目前多数主流论坛程序的新版本都内置了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;
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"]);
Code: Select all
//+--------------------------------------------
//| Check the reg_code
//+--------------------------------------------
Code: Select all
if (!$resp->is_valid)
{
$this->show_reg_form('err_reg_code');
return;
}
Code: Select all
<!--{REG.ANTISPAM}-->
Code: Select all
<!--{REG.RECAPTCHA}-->
最后一步是自己在安装过程中发现的,也在这里提出来供可能遇到问题的各位参考:
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