Quasi-Spam Filterプラグイン

コメントスパム受信時、トラックバックスパム受信時のリアクションを複数サポートする、スパムフィルタプラグイン。

/!\ Movable Type 3.2以降では、標準で付属しているSpamLookupプラグインの利用をお勧めします。Quasi-Spam Filter Pluginは3.2以降でも動作しますが、SpamLookupなどと同時に使用した場合の振る舞いは保証できません。また、今後のバージョンアップなどは予定していません。

quasi-spamfilter.zip

更新履歴

  • 0.10(2005.01.28):
    • 公開開始。
  • 0.15(2005.02.01):
    • トラックバックスパムのフィルタリングをサポート。
  • 0.17(2005.03.05):
    • Perl 5.0で動作しない問題への対策。
  • 0.18(2005.03.06):
    • Storable.pmが存在しないときに動作しない問題への対策。
  • 0.20(2005.04.08):
    • is_comment_spam、is_tbping_spamのインタフェースの改善。
    • ロギング機能の追加。

概要

コメントスパム受信時、トラックバックスパム受信時のリアクションを複数サポートする、スパムフィルタプラグインです。実用にも堪えると思います(私自身も使っています)が、スパムフィルタのリファレンス実装を目的としています。このプラグインでは、自作のスパムフィルタを作りたい、もしくは作っているという方にも利用いただけるようなBuilding Blocksを提供できればと考えています。

MT 2.X、3.0ユーザーの方はエントリー末尾の注意事項を読みましょう。

インストール方法

quasi-spamfilter.zipをダウンロードし、展開してください。次に中に含まれるquasi-spamfilter.plをMovable Typeのpluginsディレクトリにアップロードしてください。以上です。

カスタマイズ方法

フィルタする対象を変更する

このプラグインは、デフォルトではH1要素やA要素が含まれるコメントやトラックバックをフィルタリングしてくれます。フィルタする対象を変更するには下記の$COMMENT_PATTERN、$TBPING_PATTERN変数を適宜変更します。

# Set your spam pattern
our $COMMENT_PATTERN = '<h1>|<a\s'; # H1 or A elements
our  $TBPING_PATTERN = '<h1>|<a\s'; # H1 or A elements

また、判定ロジックはis_comment_spam、is_tbping_spamというsubroutineに定義してあるので、これも目的に合わせて変更するとよいでしょう。

sub is_comment_spam {
    my $comment = shift;
    return ($comment->text =~ /$COMMENT_PATTERN/i);
}
 
sub is_tbping_spam {
    my $tbping = shift;
    return ($tbping->excerpt =~ /$TBPING_PATTERN/i);
}

例えば、以下のように変更するとコメント本文だけではなく、コメンター名のチェックができるようになります。

sub is_comment_spam {
    my $comment = shift;
    return ($comment->text =~ /$COMMENT_PATTERN/i ||
            $comment->author =~ /$COMMENT_PATTERN/i);
}

コメントスパムの受信時のリアクションを変更する

デフォルトでは、コメントスパム受信時にシンプルなエラーメッセージだけ表示するようになっています(=CommentError)。Quasi-Spam Filter Pluginではスパマーに対するリアクションを以下の6通りから選択できるようになっています。

{i} CommentErrorは最もサーバーへの負荷が小さいというメリットもありますが、スパマーが繰り返しスパミングを試みて除外パターンを発見しやすいというデメリットもあります。一般的には負荷と安全性はトレードオフの関係にあると推測され、一概にどの方法がベストかを決定することはできません。このような観点から、複数の方法の提供してそのうち一つを選択するようにしています。

CommentFilter
コメントが成功した場合と区別しません。"CommentFilter"というApplication Level Callbackを利用しています。
CommentThrottleFilter
コメントが連続投稿制限に引っかかったように見せます。"CommentThrottleFilter"というApplication Level Callbackを利用しています。
CommentError (デフォルト)
シンプルなエラーメッセージだけ表示します。最もLight-weightな方法です。
CommentLongError
親切なエラーメッセージを表示します。コメント欄に名前などを入力しなかったときなどと同様にコメント・エラーの表示をします。
CommentRedirect
特定のURLにリダイレクトします。スパマーにイヤな画像などを見せてあげましょう。どのURLにリダイレクトするかは$URLという変数で定義されています。
CommentEvilRedirect
スパマーがURL欄に入力したURLにリダイレクトします。URLを入力されていない場合には$URLという変数で定義されたURLにリダイレクトします。

これらのうちのどれを適用するかは、$COMMENT_METHODという変数を設定することで制御できます。

# Choose a method for rejecting Spam Comments from: 
# 'CommentFilter', 'CommentThrottleFilter', 'CommentError',
# 'CommentLongError', 'CommentRedirect', 'CommentEvilRedirect'
our $COMMENT_METHOD = 'CommentFilter';

また、$COMMENT_METHODに上記以外のもの(例えば、'')を設定することでコメントフィルタリングを止めることができます。

トラックバックスパムの受信時のリアクションを変更する

デフォルトでは、トラックバックスパム受信時にシンプルなエラーメッセージだけ表示します(=TBPingError)。Quasi-Spam Filter Pluginではスパマーに対するリアクションを以下の3通りから選択できるようになっています。

TBPingFilter
トラックバックが成功した場合と区別しません。"TBPingFilter"というApplication Level Callbackを利用しています。
TBPingThrottleFilter
トラックバックが連続送信制限に引っかかったように見せます。"TBPingThrottleFilter"というApplication Level Callbackを利用しています。
TBPingError (デフォルト)
シンプルなエラーメッセージだけ表示します。最もLight-weightな方法です。

これらのうちのどれを適用するかは、$TBPING_METHODという変数を設定することで制御できます。

# Choose a method for rejecting Spam Pings from:
# 'TBPingFilter', 'TBPingThrottleFilter', 'TBPingError'
our $TBPING_METHOD = 'TBPingFilter';

また、$TBPING_METHODに上記以外のもの(例えば、'')を設定することでトラックバックフィルタリングを止めることができます。

注意

Storable.pmをインストールされていない方は…

Movable Type 3.0以降、管理画面のメインメニューにインストールされているプラグインの情報を表示する機能が追加されました。この機能を使うにはサーバーにStorable.pmがインストールされている必要があります。

Quasi-Spam Filter 0.18以降では、Storable.pmの有無に関わらず、プラグインとして機能するようにしてありますが、メインメニューにプラグインの情報が表示されるかどうかはStorable.pmの有無に依存します。

MT 2.x、3.0ユーザーの方は…

このプラグインはMovable Type 3.1以降用ですが、試した限りでは、2.x、3.0でも$COMMENT_METHODをCommentError, CommentLongError, CommentRedirect, CommentEvilRedirectのいずれか、$TBPING_METHODをTBPingErrorに設定すれば動作します。

See Also

License

This code is released under the Artistic License. The terms of the Artistic License are described at http://www.perl.com/language/misc/Artistic.html.

Author & Copyright

Copyright 2005, Hirotaka Ogawa (hirotaka.ogawa at gmail.com)