2004年11月4日木曜日

コメントスパム対策をしました。

数日前にコメントスパム対策としてmt-comment.cgiの名前を変更したんですが、全く効果がなかったので、別の対策を行うことにしました。

他のブログはどんな対策をしているかみてみると、
-TypeKeyを使う
-連続投稿できる間隔を設定
-日本語が含まれていないコメントをブロック
-BanリストによるIP制限
というような方法が一般的みたいです。それぞれの方法をみてみると、TypeKeyは普通にコメント書きたい人にも一手間かけてしまうのがちょっとと思うし、連続投稿できる間隔の設定というのも一回は書き込まれてしまうし、Banリストは作成するのがめんどいしということでいまいち。

そこで今回は日本語が含まれていないコメントをブロックするという方法を少し発展させて全角ひらがなが連続するm文字が、n箇所以上無いコメントはスパムとみなすという対策をとることにしました。

今回修正したファイルはMT::App::CommentsとMT::L10N::jaの2つです。モジュールを直接いじるとMTをバージョンアップするときなんかに困ることになりそうなんで、プラグインとして書こう思ったんですが、プラグインの作り方を調べるのがめんどくさくなって、直接修正に妥協しちゃいました。。

この修正で、ひらがなが3文字連続している部分が2箇所以上ないコメントをPostした場合、エラーメッセージを表示するようになりました。軽くテストしましたがきちんと動いているみたい。

以下のコードをMT::App::Commentsのpostメソッドの上の方に追加し、MT::L10N::jaの%Lexiconに日本語エラーメッセージを追加しました。

>

my ( $m, $n ) = ( 3, 2 ); # ひらがなの文字数, 出現する回数

my $enc = $app->{cfg}->PublishCharset || '';
my $text = MT::I18N::encode_text($q->param('text'), $enc, 'euc');

my @count = $text =~ /(?:\xA4[\xA1-\xF3]){$m,}/g;
return $app->handle_error($app->translate(
"Your comment looks like a spam.[_1][_2]", $m, $n ))
if $text ne "" && scalar (@count) < $n;
<




2 件のコメント:

  1. この方法よいですね。コメントスパムの99%は英語でしょうから
    日本語が標準だから成せるワザというか。
    英語のサイトでは無理だと思うので日本人の特権!

    返信削除
  2. そうですねー。まさに日本人の特権ですね。
    日本語のサイトを見ようとする外人は少ないでしょうし、いても日本語が読めるんでしょうから(笑)この対処法は現実的な方法なのかなーと思います。

    返信削除