2004年11月03日
コメントスパム対策をしました。
数日前にコメントスパム対策として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;
Continuing the discussion...
このエントリーのトラックバックURL:
http://hori-uchi.com/mt/trackback/220
このリストは、次のエントリーを参照しています: コメントスパム対策をしました。:
以前のエントリーでコメントスパム対策として「コメントにひらがながM回連続している部分がN箇所以上ない場合スパムとみなして、はじく」ということをやりましたが、これ...
続きを読む: mt-ban-nonja-com.pl - コメントスパム対策プラグイン
from hori-uchi.com at 2005年03月22日 04:15
Comments
この方法よいですね。コメントスパムの99%は英語でしょうから
日本語が標準だから成せるワザというか。
英語のサイトでは無理だと思うので日本人の特権!
Posted by kawachi at 2004年11月11日 00:57
そうですねー。まさに日本人の特権ですね。
日本語のサイトを見ようとする外人は少ないでしょうし、いても日本語が読めるんでしょうから(笑)この対処法は現実的な方法なのかなーと思います。
Posted by hori-uchi at 2004年11月11日 10:21
