给MT加上防范发广告机器人的校验码

Blog写的久了,总有一些广告机器人滥发评论,垃圾留言是越来越多。本来想使用jayallen.org推出的阻止垃圾留言的控件MT-Blacklist,或者是QinYun阻止Movble Type垃圾留言的另一种方法,但MT-Blacklist使用较为复杂,QinYun的方法需要修改的模板太多。不过后来发现了jsen写的校验插件(SCode plugin, security code plugin),能够有效防止滥发垃圾邮件。

1.在安装之前,首先需要确定的是您的主机安装有GD模块;

2.在此处下载SCode plugin,解压缩;

3.编辑解压缩后的SCode.pm,修改my $tmpdir为您服务器的暂存目录,my $scode_length为校验码长度,my $scode_maxtmp为最多同时能够产生多少个校验吗,默认为50,若您的Blog访问人数较多,请适当调整此值;

4.修改mt-scode.cgi,$c_background、$c_border、$c_line、$c_code可以设置校验码的颜色;

5.将SCode.pm上传到MT安装目录的lib/MT/目录,scode.pl到plugins/目录,mt-scode.cgi到根目录,并修改mt-scode.cgi属性为755;

6.打开lib/MT/App/Comments.pm,找到

if (!$q->param('text')) {
return $app->handle_error($app->translate("Comment text is required."));
}

在后面加上

#
# SecurityCode hack start
#
require MT::SCode;
my $code = $q->param('code');
my $scode = $q->param('scode');
my $sscode = MT::SCode::scode_get($code);
if ($scode ne $sscode) {
return $app->handle_error($app->translate(
"Wrong or missing Security Code."));
}
MT::SCode::scode_delete($code);
MT::SCode::scode_create($code);
#
# Security hack ends
#

7.打开lib/MT/Template/Context.pm,查找_hdlr_comment_fields子函数,在

sub _hdlr_comment_fields {
my ($ctx, $args, $cond) = @_;

在其后添加

# Security code validation
srand int (time/10)+$$;
my $securitycode = int rand(MT::SCode::scode_tmp());
$securitycode++;
MT::SCode::scode_create($securitycode);
# End Security code hack

再查找两处

<MT_TRANS phrase="Remember me?" />
<input type="radio" id="remember" name="bakecookie" />;

在其后都添加

<!-- Security Code Check -->
<input type="hidden" id="code" name="code" value="$securitycode" />
<label for="scode">Security Code:</label><br />
<img border="0" alt="Please enter the security code you see here" src="$path/mt-scode.cgi?code=$securitycode" /><br />
<input tabindex="3" id="scode" name="scode" /><br /><br />
<!-- end of Security Code Check -->

8.编辑Individual Entry Archive、评论清单模板、评论预览和评论出错模板,在

<label for="url">URL-我的网站:</label><br />
<input tabindex="3" id="url" name="url" /><br /><br />

即评论的网页地址输入下面加上

<!-- Security Code Check -->
<label for="scode">SCode-校验码:</label><br />
<input type="hidden" id="code" name="code" value="<$MTSecurityCode$>" />
<img border="0" src="<$MTCGIPath$><$MTSecurityImage$>?code=<$MTSecurityCode$>"><br />
<input tabindex=3 id="scode" name="scode" /><br /><br />
<!-- end of Security Code Check -->

9.重建您的Blog,校验码就出现了,可以有效防止评论机器人滥发垃圾留言