« MT3.151-jaアップデート | home雑記帳Topへ | ヘッドホンATH-A9のイヤパッド交換 »

2005年02月18日(金)

Trackback spam対策pluginを考える

spam対策の効果か、ここしばらくMTへのspamは書き込まれていません。
(リファラspamは相変わらずですが)
しかし、いつ新手のspammerが現れるか分かりませんし、用心に越したことはないでしょう。
コメントspamに対しては色々と対策が講じられていますが、トラックバックspamへの対処は今ひとつ決め手に欠けるという感じがします。
そこで、pluginとして、トラックバックspamへの簡単で効果的な対策ができないか考えてみました。
試作pluginも公開します。

まず、既に公開されているpluginを調査してみます。
トラックバックに関しては、ブラックリストを用いたフィルタが多い様ですね。
他には内容文にタグが入っている場合に弾く方式があります。
鵺的:想空間さんのmt-spamstop-tbあたりは、シンプルかつ効果がありそうです。
Ogawa::MemorandaさんのQuasi-Spam Filter Pluginも同様の手法を取っていますが、もうちょっと拡張性ありですね。

ここで方針として、データのアップデートが必要なブラックリスト方式は「簡単で効果的」という目標から外れると感じるので、ここでは考えないこととします。
また、内容にタグが入っている場合に弾く方式ですが、ウチのblogのように受けたトラックバックのURLを無条件にリンクしている場合(多くのサイトがそうなっていると思います)は、内容にアンカーが入っていなくても自前でリンクを作成するので、アンカータグの無いトラックバックspamが出てくることも十分考えられます。

と云う事で、フィルターの掛け方を考えます。
トラックバックspamに遭ったサイトを見ると、「何十件書き込まれた」とか「短時間に大量」という場合があるようです。これを防ぐ事を考えます。
まず、blog間のトラックバックという機能の特性として、同じところ(URL)から同じエントリへの物は一つあれば十分ですよね?同じトラックバックが2つ以上あれば、「ダブってる」と認識するでしょう。(2つの間に時間が空いていれば、更新通知かな?と思わないでもないですが)
と云うことは、「連続して同じ様なトラックバックが来た場合はそれを弾く」という動作でトラックバックspamにある程度対処することができるのでは?と考えました。(一つは書き込まれてしまいますが…)

そこで、まず実験として「一つ前のトラックバックと同じURLからのトラックバックは弾く」という動作のフィルターを考えてみました。
これで、複数のトラックバックが来ても、最初の一つ以外は弾く事ができる可能性があります。(URLがコロコロ変わってしまうとNGですが)

実装としては、先日MTをアップデートする際にソースを眺めていて、トラックバックフィルタ用にコールバック機構(TBPingThrottleFilterとTBPingFilter)が備わっているのを見つけたので(3.1からの機能でしょうか。3.01には無かったと思います)、これを利用してみます(今回はTBPingFilter)。

と云う事で、大したことのないpluginにつらつらと能書きをタレてみました。
plugin名はExTBFiltとしました。(Existent TrackBack Filterの意)
ダウンロード:ExTBFilt ver0.1 おそらくMovableType3.1以降用
インストールは、ファイルを$MTCGIPath$/plugins/にコピーするだけです。
perl5.8.0以前でこのpluginを使用する場合は、Storable.pmが必要です。(Perl5.8.0以降は標準で入っている様です)

実際の使用では、タグチェック方式との併用が効果的かと思います。
また、このpluginの二次的効果として、重複トラックバックを防く事ができます。
しかし、副作用として、
  • 実際には送られているがタイムアウトなどで残ってしまったトラックバックが延々送り続けられる可能性がある
  • 送り先を間違った等でもう一度送り直す様な場合でも弾かれてしまう
なども考えられます。

今後の改良としては、
  • 送信元・先共に同じ場合のみ弾く
  • 過去(全部、一定期間、一定個数)に受けたトラックバックから検索して同じ物があれば弾く
  • 後から来た物を弾かずに古い物を消して新しい物を残す
などが考えられるでしょうか。
あと、重複でもエラーとせずに、受け入れたようなふりをして実際には書き込まない、という動作の方が良いかもしれません。
(どなたか作ってください:-)

不具合や修正・改良などありましたらぜひお知らせ下さい。コメントも歓迎です。
(なかなか時間がないのでいつ手を入れられるか分かりませんが…)

pluginの作成にはTechknow Movable Typeさんを参考にさせていただきました。

[2005年2月20日追記]
こんなpluginもありました。

Trackback Ping SPAM がなかなかひどいことになってきていて、特定のキーワードや URL ベースでブラックリストしているのですが新規追加もなかなかメンドウ。
ということで、DNS ベースの Blacklist である DSBL を利用して IP アドレスがブラックリストに載っている場合は Trackback Ping を拒否するプラグイン mt-tbping-dsbl をつくってみました。
DSBLという物の存在自体知らなかったのでナルホドーという感じです。勉強になります。

Posted by Zephyr : 12:41 | カテゴリ Movable Type

トラックバック

このエントリーのトラックバックURL:
http://flow.dip.jp/x/mt/mt-tb.cgi/170

コメントをどうぞ