Home » January 2005 » Quasi-Spam Filter Plugin

Quasi-Spam Filter Plugin

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

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

Quasi-Spam Filter Plugin.ja JP - Ogawa Code

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

このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/232

Links referred to this entry

Comments (49)

  1. なんだか、今度はトラックバックスパムに切り替えた模様。オンラインポーカーとオンラインカジノから連続10件トラックバックしてきました。もう、あきれてしまいますね。

  2. というわけで、0.15ではトラックバックスパムにも対応してみました。

  3. いつもお世話になっております。早速、First Release 0.10版をインストールしたのですが、その直後に TBPing spam が届いて困っておりました。プラグイン v0.15のご提供に感謝いたします。国内の無料ブログサービスから発信されたspam で、その会社の利用規約をみると、当然「違反行為」に該当するのですが、サービス側は「一切責任を負わない」と明記されていました。「当事者間で紛争、裁判やってください」とのこと。無料ブログサービスを乗り換えて、スパムを流し続けることも可能です。無料ブログサービス側にも加害者としての責任・明確な対応義務がないと、spam 増え続けそうです。デフォルト www.2ch.net などに Redirect しないで、ドメインから自動判別して ブログサービス提供側に振ったらいかがでしょうか。

  4. このプラグインでそういう機能を提供する予定はありません。実効性もないと思います。トラックバックのURL欄はいかようにも詐称できますし、発信者はブログサービスである必要もありません。tipsさんの場合で言うと、「URL」自体は当該ブログから発信されたものと判断する根拠にはならないのです。ブログサービスを使ってそういう間抜けなアタックをする人も確かにいるには違いないわけですが、URLを晒して社会的な制裁を待つとかIP Ban Listに登録するとかやりようはあります。

    さて、よい機会なので私とこのプラグインのポジションを明確にしておきたいと思います。

    単純にスパムフィルターとしての機能や完全性を求めるならMT-Blacklistがよくできています。反面、MT-Blacklistはモノリシックな造りになっているので簡単に拡張できず、新手の攻撃が発見されたときに対応しづらいのです。MT-Blacklist自体の動作も比較的重めで、DoS攻撃には必ずしも強くありません。そもそもトラックバックのペイロードは256バイト程度しかないわけで「鶏を割くにいずくんぞ牛刀を用いん」の好例でもあります。

    Quasi-Spam Filterはこうした重量級ソリューションのアンチテーゼです。さまざまなスパムフィルターを実現するための、拡張が容易で、軽量なフレームワークを提供することを目的としています。現状はMovable Typeの用意しているフックを利用する基本的なサブルーチンを揃えただけという、いわば前段階に過ぎません。ゆくゆくはスパムの判定ルールやリダイレクトURLの決定ルールは別クラスとして簡便に記述できるようにし、複数のルールを組み合わせて自由度の高いフィルターを実現できるようにしたいと考えています。もっともPerlのオブジェクトシステムをいまだによく理解できていないのでどうなるかは分かりませんが。

    そういうわけで、私がスパム判定ルーチンやリダイレクトURL決定ルーチンの「例」を示すことはあるかもしれませんが、単体のスパムフィルターとしての機能を充実させること自体はこのプラグインの目的ではありません。ご理解願います。

  5. 承知いたしました。comment spam と TBPing spam を同時に送るスパマー(もし、いるとすれば)に対しては、Comment(Evil)Redirect は有効となるが、TBPing spam だけであれば、詐称などの理由からURL解析は無意味で、v0.15では主に filtering のリアクションを行うということですね。詳しいご解説までいただきまして、誠にありがとうございました。

  6. トラックバック絨毯爆撃は、当方でもすさましく、是非このプラグインを使用させていただきたくコメント致します。
    MT2.661でも動作しますでしょうか?

  7. それーは試していません。
    $COMMENT_METHOD、$TBPING_METHODとも「○○Filter」以外のものを指定すれば、あるいは動くのかもしれませんが保証できません。

  8. やはりそうでしたか。
    ご丁寧なコメントありがとうございました。
    参考に良く拝見しております。これからもよろしくお願い致します。

  9. 今軽くやってみました。「○○Filter」以外は正常に機能しました。

  10. ありがとうございました。
    「Light-weightな方法」を試してみます。

  11. はじめまして。BlogPeopleへ追加いただきましてありがとうございました。
    また、Quasi-Spam Filter Plugin v.0.15もありがたく使わせて頂きます。

  12. はじめまして。
    勧められてこのページにたどり着きました。トラックバックスパムに悩まされているのでさっそく試させて頂きます。嬉しいです。

  13. はじめまして。
    コメントスパムが来るようになったので、対策方法を探していてたどり着きました。
    導入方法が簡単で、その説明も大変わかりやすいので、さっそく使わせていただきました。
    ありがとうございます。

  14. こんばんは。
    いつもお世話になります。

    既にご存知と思われますが
    http://yujiro.dyndns.org/blog/koikikukan/archives/cat_42.php
    の記事でOgawaさんのpluginを無断で修正してしまっておりました。またこの修正に関しては貴サイトへのコメント・トラックバックも怠っており、申し訳ございません。他の方からのご指摘を頂きまして不誠実な行為になってしまっていたことに気がつきました。大変遅くなりましたが本件につきまして、まずもってお詫び申し上げます。

    それで、改めましてソースコードの改変について許諾を頂きたくコメントさせて頂きました。また今後、Ogawaさんご提供のpluginについて(そうそうないと思いますが)改変を行いたい場合はCCLの条件に基づくという認識でよろしいでしょうか。
    それではどうぞよろしくお願い致します。

  15. yujiroさんのエントリーは私も読んでおりますので気にしないでください。

    このプラグインはブログ本体とは異なり、Artistic Licenseに基づいて配布されています。
    http://www.perl.com/language/misc/Artistic.html
    ブログなどの記事上で改変を行う場合には、Quasi-Spam Filter Pluginに基づいていることや改変内容を明記してください。
    改変した「パッケージ」を配布したい場合には、Quasi-Spam Filter Pluginに基づいていることや改変内容を明記した上で、異なるパッケージ名称で配布してください。バグフィックスバージョンに関してはこの限りではありません。

    あと「||」の代わりに「|」が使われている部分がありましたね。前者だと左辺が真のとき右辺を評価しませんが、後者は必ず両方評価します。だから少し効率が悪くなります。
    他にこんな感じで結合した文字列をチェックするという方法もありますね。
    is_tbping_spam($ping->title . ' ' . $ping->excerpt)

  16. 暖かいお言葉と鋭いご指摘、ありがとうございます。効率のいいソースに思わずニンマリしてしまいました。
    Artistic Licenseにつきましては存じませんで、先ほど日本語訳のものを読んでみました。
    緩やかな方向で許諾くださり感謝しております。

    パッケージ配布などというだいそれたことは思ってもおりませんので、Quasi-Spam Filter Pluginに基づいていることと改変内容の明記について該当のエントリーを再度見直したいと思います。
    上のソースについてもOgawaさんからの改善案として是非掲載させて頂きたく存じます。

  17. はいはいどうぞ。

    去年の11月くらいにプラグインなどを公開するための英語版ブログを作りましたが、これはソフトウェアのドキュメントとして英語版のものを用意したい他に、本ブログとは異なるライセンスレベルをソフトウェアには課したいと考えたからです。英語版のQuasi-Spam Filter Pluginのページをご覧になると分かると思いますが、当初より個々のページにArtistic Licenseが謳ってあります。
    http://as-is.net/hacks/2005/01/quasi_spam_filter_plugin.html

    ですので、今回ソフトウェアの配布条件を改めたわけではないというのが私の認識です。英語版では元々そうなっていて、日本語版は英語版の補足情報として用意したつもりなので(作成日時に微妙な前後がありますが)、改めてライセンスの表示を行うことはしなかった、したがってダブルスタンダード的な状況による誤解を招いた、とこういうことです。以後は留意します。こういうことが話題になること自体はよいことだと思いますね。

  18. トラックバックも送りましたので、二重にお知らせすることになってしまいますが、私の誤解により、お騒がせしてしまいました。
    ご迷惑をおかけしました。
    Artistic License についても、勉強させていただきました。
    ライセンスについて言及するのは、デリケートな問題も含み、軽々しく騒ぐものではないかなと感じました。
    重ね重ね、お詫びいたします。

  19. 議論としては意味があったと思いますが、ひとまず私のところにコメントかメールしていただけばよかったのかなとも思います。
    個人のブログやmixiや2ちゃんなど私の目の行き届かないところもありますので。

  20. いつもお世話になります。
    今度はMTCommentAuthorをチェックする改変記事を投稿させて頂こうと思ったのですが、まずは(前回分含め)要望としてOgawaさんにお願いした方がよろしいでしょうか。

  21. いえいえ、連絡なしに改変記事をお書きになって構いませんよ。
    私からは改変記事投稿に際してコメントやトラックバックを取り立ててお願いすることもありません。自由意志でどうぞ。

  22. 初めまして。
    先日からスパムで困っていたところです。
    導入させていただきました。
    ありがとうございました。

  23. はじめまして。
    小粋空間さんのエントリーで知りまして、早速導入してみました。
    ところが、なぜかうまく作動しません。エラーログには
    Plugin error: /***/mt/plugins/quasi-spamfilter.pl Compilation failed in require at /***/mt/lib/MT.pm line 293.
    というメッセージが出ています。ogawa様、もしくは他の利用者の方で、原因について心当たりのある方は、いらっしゃらないでしょうか。

  24. すみません。23番のコメントで書き忘れましたが、当方のMTのバージョンは3.15-jaです。(念のためサーバはApache/1.3.29 (Unix) PHP/4.3.6です。)

  25. プラグインのファイルに何らかの変更を加えてはいませんでしょうか?

  26. 早速のレス、ありがとうございます。
    プラグインファイルには、our $PATTERN の文字列リストに加筆しただけです。

  27. エラーはプラグインの読み込み時にPerlのプログラムに文法等の誤りがあってコンパイルに失敗していることを示しています。私の手元ではそのエラーは起きませんので、加筆する前にまず私が配布しているパッケージのままでお試しください。

    それがもし動くのであれば加筆部分に問題があると考えられ、具体的に加筆部分を示していただかないと検討できません。

  28. デフォルトのままのものを再導入してみましたが、やはり同じ症状でした。

  29. プラグインファイルの改行コードはいかがでしょう。

  30. 昨日から仕事でMTから離れていました。せっかくレスポンスいただいたのに、お返事が遅くなり失礼致しました。
    改行コードですが、エディタ(Terapad)で開けて確認したところLFとなってました。(文字コードはShift-Jisです。)

  31. 分からないですね。強いて言うならば、
    (1) Webサーバーにログインして、コマンドラインでperl quasi-spamfilter.plを直接実行したときにどのように表示されるか
    (2) 他にどんなプラグインを使っているか
    が分かるとヒントになるかもしれません。

    非常に多忙中につき今検討している時間がありません。申し訳ないです。

  32. お忙しいところ、お気を煩わせてしまいまして申し訳ありませんでした。
    ご指摘の(1)を試すところから始めて、なんとか解決できました。原因は、サーバのperlのバージョンが5.00503で、our宣言が使えないことでした。結局、ourを消して、use strictの下にuse vars qw($COMMENT_PATTERN $TBPING_PATTERN $COMMENT_METHOD $TBPING_METHOD $URL);を加えることで解決できました。(単にourをmyに置き換えても良いようでしたが。)

    本当にありがとうございました。

  33. 素晴らしいです。次回のバージョンアップで考慮させていただきます。

  34. 私のサイトの方にも書き込みありがとうございます。
    新しいバージョンの物をダウンロードして入れてみたのですが、
    サーバに依存するのか、私のMTの設定がいけなかったのか、
    残念ながら動きませんでした。
    MT3.151の方のログに以下のようなエラーがでていました。
    一応参考までに...

    Plugin error: /virtual/www/blog/plugins/quasi-spamfilter.pl Can't locate Storable.pm in @INC (@INC contains: /virtual/www/blog/extlib /virtual/www/blog/lib /usr/lib/perl5/5.00503/i686-linux /usr/lib/perl5/5.00503 /usr/lib/perl5/site_perl/5.005/i686-linux /usr/lib/perl5/site_perl/5.005 .) at /virtual/www/blog/lib/MT/PluginData.pm line 9. BEGIN failed--compilation aborted at /virtual/www/blog/lib/MT/PluginData.pm line 9. BEGIN failed--compilation aborted at /virtual/www/blog/lib/MT/Plugin.pm line 58.

  35. Storableモジュールがないわけですね。これは相当痛いです。
    ホスティング会社にStorable.pmを入れてもらった方がよいでしょう。

    一応Storable.pmがないときも問題ないように対策したものを0.18としてリリースしました。
    Storable.pmがないときには管理画面でのプラグイン表示がなくなりますが、プラグインとしては正常に動作します。

  36. プラグイン、使わせていただきました。
    ソースの改変については小粋空間さんのカスタマイズを
    参考にさせていただいています。

    ありがとうございました。

  37. Storable.pmがない場合用に、修正して頂いてありがとうございます。

    0.18をダウンロードして、サーバにアップしてみたところ、
    確かにプラグイン部分に表示はでないのですが、ログの方にもエラーがでていないので多分ちゃんと動いていると思います。

    ありがとうございました!!

  38. 最近、オンラインポーカーとオンラインカジノからのトラックバックスパムに困っていましたので、早速導入させていただきました。

    お借りして行きます。

    ありがとうございます。

  39. プラグイン利用させていただきました。
    サーバーによりメインメニューにプラグインが表示されるサイトと表示されないサイトとがあるのですが、しばらく様子を見てみようと思います。

  40. はじめまして。
    プラグインをお借りいたします。
    エントリーをアップしたのですが、トラバが3つもダブってしまいました。
    お手すきの時にでも、重複分の削除をよろしくお願いします。

  41. お世話になっています。
    久しくスパムには遭遇していなかったのですが、昨日2通とどきました。
    本文が空白でした。思わず笑ってしまいました。

    今のところ、露骨なユーザー名で届いているので、小粋空間さんのようにユーザー名やタイトルで禁止語句を登録するのも、効果ありそうです。

    ogawaさんからも対策がありましたら、ご紹介ください。
    (文字列がないときもフィルタリングの対象とする、という手は、どんな風にできるのかなと自分でも考えてみようと思っています)

  42. 以下のようにすれば、コメント本文やトラックバックのExcerptが空白の場合に撥ねることができます。

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

    sub is_tbping_spam {
    my $tbping = shift;
    return !$tbping->excerpt || ($tbping->excerpt =~ /$TBPING_PATTERN/i);
    }

    ただし、ここにランダムな文字列を入れるのが流行ると厄介ですね。

  43. ありがとうございます。(全体を通して)簡潔なコードで勉強になります。勉強中の身で、自分でも考えてみたいなと思っていましたが、こうだろうなと思っていても、きちんと示していただけると安心できます。

    > ランダム

    がーん、そんな手が・・・。

  44. 最近また増えてきましたので、こちらのプラグインを導入させていただきました。
    ありがとうございます。

  45. 初めまして、「人間万事塞翁が馬 で行こう」のsumiと申します。
    「小粋空間」さんのリンクから訪問しました。

    英文のコメントスパムで困っていました。
    quasi-spamfilterプラグインを導入させて頂き
    お陰様で、以後1通もスパムの書き込みが無くなりました。
    有り難うございました。
    説明も大変わかりやすく助かりました。

  46. 初めまして★
    小粋空間さまの記事でこちらのプラグインのことを知りました。
    トラックバックスパムが何件も来てイヤな気持ちになってたので、導入させてもらいました(*^_^*)
    とりあえずデフォルトの状態で使わせてもらいます。
    ありがとうございましたm(__)m

  47. 初めまして。
    小粋空間様の記事を見て、こちらの、プラグインを知りました。
    最近、毎日、コメントスパムが何件も来て、困っていたので、
    導入させて頂きました。
    とりあえず、デフォルトで使わせて頂きます。
    有り難うございました。
    (*- -)(*_ _)ペコリ

  48. TBスパムの対策に使用させていただきました。
    フィルターのカスタマイズも分かり易く説明して頂いて、助かりました。
    時々キーワードを追加してはいますが、ほぼシャットアウト出来ているようです。
    ありがとうございました。

  49. はじめまして。
    小粋空間さまのエントリーからこちらにきました。
    とりあえず導入は成功したようなので、様子をみたいと思います。
    これで減ってくれるといいんですけどね(^。^;)
    ありがとうございましたm(_ _"m)ペコリ

Post a comment

Remember me?