最近、スパムコメントが激増しています。とりあえずはデータ収集と思ってIP Banningなどもせずに放置しておいたのですが、そろそろ手を打つことにしました。
先週、Jay Allen :: The Daily Journalに掲載されたKilling Comment Spam Deadおよび、それをまとめたKilling Comment Spam for Dummiesに沿って、スパムコメント対策をしてみました。
以下は基本的に上記二つの内容を抜粋して日本語にしたものです。Good job, Jay!
まず次のMTプラグインをインストールします。
プラグインはMTディレクトリーのすぐ下のpluginsディレクトリーに置きますが、MacrosとPerlScriptは、extlibディレクトリーの下にbradchoateを作成し、その中に入っていた*.pmファイルを置く必要があります(詳細はBrad Choateの各プラグインの説明参照)。
次に、次の二つのテンプレート・モジュールを作成します。管理画面のテンプレートの編集で、下のほうにある「新しいテンプレート・モジュールを作成」のリンクを選んで、以下の名前で(名前は正確にこのとおりである必要があります)、(内容)のリンクの中身をコピー&ペーストしてテンプレートを作ってください。
注)
次に、実際のテンプレートに、このモジュールを組み込みます。「MTComments」タグを使っているテンプレートに対して作業しますが、標準的な設定ではIndividual Archives TemplateやComment Listing Template、Comment Preview Templateあたりが対象になります。トップページに最新コメントなどをリスティングしている場合は、Main Indexも対象になります。
まず対象となるテンプレートに次の一文を加えます。できればテンプレートの一番頭に入れるといいでしょう。
<$MTInclude module="Comment Spam URL Neutralizer"$>
次に「<MTComments> ... </MTComments>」ではさまれた部分を、次のように書き換えます(太字部分)。
<MTComments>
<MTIfNotMatches expr="[MTCommentAuthorLink apply_macros='m/^banned_urls/']" pattern="m/\Q[[COMMENT SPAM]]\E/">
<MTIfNotMatches expr="[MTCommentBody apply_macros='m/^banned_urls/']" pattern="m/\Q[[COMMENT SPAM]]\E/">[途中のコードは省いてあります]
</MTIfNotMatches>
</MTIfNotMatches>
</MTComments>
Comment Preview Templateについては、次のようにすることで、コメントのプレビュー時に、一般の投稿者が不具合を認知できるようにできます。
<div class="comments-head"> Previewing your Comment </div><MTIfMatches expr="[MTCommentPreviewAuthorLink
apply_macros='m/^banned_urls/']"
pattern="m/\Q[[COMMENT SPAM]]\E/"><p>
あなたのコメントは、スパムとみなされる文字列を含むために、投稿できません。
</p>
<p>
質問・疑問がある場合は、このweblogのオーサーにコンタクトしてください。
</p>
</MTIfMatches>
<MTIfNotMatches expr="[MTCommentPreviewAuthorLink
apply_macros='m/^banned_urls/']"
pattern="m/\Q[[COMMENT SPAM]]\E/">
<MTIfMatches expr="[MTCommentPreviewBody
apply_macros='m/^banned_urls/']"
pattern="m/\Q[[COMMENT SPAM]]\E/"><p>
あなたのコメントは、スパムとみなされる文字列を含むために、投稿できません。
</p>
<p>
質問・疑問がある場合は、このweblogのオーサーにコンタクトしてください。
</p>
</MTIfMatches>
</MTIfNotMatches><MTIfNotMatches expr="[MTCommentPreviewAuthorLink
apply_macros='m/^banned_urls/']"
pattern="m/\Q[[COMMENT SPAM]]\E/">
<MTIfNotMatches expr="[MTCommentPreviewBody
apply_macros='m/^banned_urls/']"
pattern="m/\Q[[COMMENT SPAM]]\E/"><div class="comments-body">
<$MTCommentPreviewBody$>
<span class="comments-post">
Posted by
<$MTCommentPreviewAuthorLink$>
at <$MTCommentPreviewDate$>
</span>
</div>
<div class="comments-body">
<form method="post"
action="<$MTCGIPath$><$MTCommentScript$>">
<input type="hidden"
name="entry_id" value="<$MTEntryID$>" />
<input type="hidden"
name="static"
value="<$MTCommentPreviewIsStatic$>" />
[途中のコードは省いてあります]
</form>
</div></MTIfNotMatches>
</MTIfNotMatches>
トラックバックについても、もしスパムトラックバックが増えてくるようであれば、TrackBack Listing Templateに同様のモジュールを組み込むことで、怪しいリンク先へのトラックバックを外すことができるでしょう。
Comment Spam Banned URL List
(追記)10月13日にMovableTypeの開発元、Six Apart社のブログ「Six Log」に、このソリューションが掲載されていました。
(追記その2)Bayesアルゴリズムを使ったスパムコメント・フィルターのMTプラグインがありましたので、その件については別エントリー「スパム・コメントとの戦いは続く」に掲載しました。