最近は英語のコメントスパムばかりで、しかもほとんどは「CustomizedCommentfilter」に引っかかるので、実害はありません。 承認制だしね。
で、そうやって引っかかった奴は「AutoIPBan」の刑に処することになります。
でもスパム業者って、フィルターに引っかかってもお構いなしに送って来るんですよね。
定期的にMTのログからスパムコメントの発信IPアドレスを拾って、.htaccessファイルでDenyしたりしてるんですが、キリがないです。
そこで「AutoIPBan」を参考にして、「CustomizedCommentfilter」プラグインに掛かったら、自動的にMTの禁止IPアドレスへ登録されるように改造してみました。
変更するのは Comment.pm というファイルです。 (MTディレクトリ)/plugins/CustomizedCommentfilter/lib/CustomizedCommentfilter/ にあります。
package CustomizedCommentfilter::Comment;
use strict;
use Data::Dumper;
use MT::IPBanList;
sub filter_comment {
my($cb, $app, $entry) = @_;
my $q = $app->param;
my $ip = $app->remote_ip;
return 0 unless $q->param('text');
my $text = $q->param('text');
return 0 unless $app->blog;
my $blog_id = $app->blog->id;
my $plugin = MT->component("CustomizedCommentfilter");
my $filter = $plugin->get_config_value('filter', 'blog:'.$blog_id);
my $log = $plugin->get_config_value('logout', 'blog:'.$blog_id);
my @filter = split('\r?\n', $filter);
for (@filter) {
if ($text =~ /$_/) {
if ($log) {
$app->log($plugin->translate('filtered [_1]', $_));
_add_to_ipbanlist($blog_id, $ip);
}
return 0 ;
}
}
return 1;
}
sub _add_to_ipbanlist {
my ($blog_id, $ip) = @_;
unless (MT::IPBanList->load({ blog_id => $blog_id, ip => $ip })) {
my $ban = MT::IPBanList->new;
$ban->blog_id($blog_id);
$ban->ip($ip);
$ban->save or die $ban->errstr;
}
}
1;
この変更を加えると、「CustomizedCommentfilter」プラグインに設定したNGワードを含んだコメントを、問答無用で禁止IPアドレスに登録しますので、くれぐれも取り扱いにはご注意ください。
ところで、上記のソースを表示するにあたって「MovableTypeが自動的に入れる改行」という記事が大変参考になりました。 ありがとうございました。