Sync A World You Want To Explore

関 信浩が2002年から書き続けるブログ。ソーシャルメディア黎明期の日本や米国の話題を、元・記者という視点と、スタートアップ企業の経営者というインサイダーの立場を駆使して、さまざまな切り口で執筆しています

最近、スパムコメントが激増しています。とりあえずはデータ収集と思って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の各プラグインの説明参照)。

次に、次の二つのテンプレート・モジュールを作成します。管理画面のテンプレートの編集で、下のほうにある「新しいテンプレート・モジュールを作成」のリンクを選んで、以下の名前で(名前は正確にこのとおりである必要があります)、(内容)のリンクの中身をコピー&ペーストしてテンプレートを作ってください。


  • Comment Spam URL Neutralizer (内容

  • Comment Spam Banned URL List (内容


注)なお二つ目のファイルの内容が、ブラウザによって改行なしで表示されている可能性があるので、その場合はURLのリストがかなりの勢いで増えているので、最新の内容をコピー&ペーストしてみてください。

次に、実際のテンプレートに、このモジュールを組み込みます。「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プラグインがありましたので、その件については別エントリー「スパム・コメントとの戦いは続く」に掲載しました。