« 特別企画おまけ - BiBio JukeBox 解体新書 | トップに戻る | USBメモリ付きボールペン、サンコーにライバル登場!? » |
2005年03月23日
スパムフィルタのコードをキーワード方式に変更しました。 
2005/02/08 [スパムコメント対策: URLフィルタを施してみました。]
の記事でもお伝えした通り、一斉に襲ってくる コメントスパム に対応するために、
MovableType の Comments.pm を書き換えて、スパムのフィルタリングを行っています。
前回の記事でもご紹介しましたが、miyagawaさんの記事、あまやんさんの記事
からほとんどそのまま流用させて頂いたコードを動かしておりました。
その内容がこちら。
use FileHandle;
my %banned_url;
my $blacklist =
"(MTインストールディレクトリ)/lib/MT/App/antispam.txt";
my $fh = FileHandle->new( $blacklist ) or die "$blacklist: $!";
while ( <$fh> ) {
chomp;
if ( $_ ne "" ) { $banned_url{$_} = 'death'; }
}
if( $banned_url{ $q->param('url') } ) {
return $app->handle_error('COMMENT SPAM rejected.');
}
(インデントが全角スペースですので、コピペの際はご注意ください。)
これで antispam.txt に列挙されたURLと同じURLを指定したコメントは
フィルタされることになります。当初はかなりの効果を発揮していました。
ところが最近、結構な勢いで この網をすり抜けるスパム が横行しています。
というのも、最近のスパムはURLのうしろに xxxxxx-yyyy.html のようなhtmlを
つけてくるのです。現在のコードですとURLの 完全マッチ しか行いませんので、
ちょっと違ったURLを作られると、どんどんすり抜けられてしまいます。
そこでいっそ、完全マッチ方式をやめ、
指定キーワードを含んだURLは全て弾く
という方式に変更することにしました。それがこのコードです。
use FileHandle;
my $blacklist =
"(MTインストールディレクトリ)/lib/MT/App/antispam_keyword.txt";
my $fh = FileHandle->new( $blacklist ) or die "$blacklist: $!";
while( <$fh> ) {
chomp;
if ( $_ ne "" && $q->param('url') =~ /$_/ ) {
return $app->handle_error('COMMENT SPAM rejected.');
}
}
antispam_keyword.txt に羅列されたキーワードが、コメントの指定URLに
一部でもマッチ すれば、スパムと判定して弾く仕組みになっています。
そのキーワードのほうは、現在こんな感じで 100個ちょっと がリストされていますが、
現時点でのスパムキーワード: antispam_keyword.txt
従来の完全マッチ方法で 1,000以上のURL をリストしていたものが、
この100個程度で問題なくカバーできることになりました。
たとえば「-casino」と「casino-」というキーワードでは、
「online-casino」も「free-casino」も「happy-casino」も「casino-games」も
みんな一様に弾いてくれることになるワケです。
今後も折を見てリストを増やしていく予定です。ただ、キーワードの設定の
仕方が巧くないと、稀に正当なURLも弾いてしまう 場合が有り得ます。
もし、このブログでそうしたトラブルがありましたら、その旨を
掲示板 のほうでご連絡頂ければ幸いです。(=゜ω゜)ノ
投稿者 CK : 2005年03月23日 14:32 | ブログ
« 特別企画おまけ - BiBio JukeBox 解体新書 | トップに戻る | USBメモリ付きボールペン、サンコーにライバル登場!? » |
▼ はてなブックマークのコメント ▼
▼ コメント ▼
ご自由にコメントください(=゜ω゜)ノ
※管理人は多忙のためお返事はほとんどできません(スミマセン)。スパムおよび本文と無関係なコメントは削除対象になる可能性があります。
▼ トラックバック ▼
このエントリーのトラックバックURL:






