久々にコメントスパム対策

  • 投稿日:
  • by
  • カテゴリ:

最近は英語のコメントスパムばかりで、しかもほとんどは「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が自動的に入れる改行」という記事が大変参考になりました。 ありがとうございました。