スパムコメントを防ぐ(MovableType v5.2 版)


120918-0001-2.png

MovbleType には標準でコメントのスパムフィルタが付いていますが、何もしないとそれをすり抜けてくるコメントが多数来ます。たまりたまった英文コメントが 10 万件 を超えてしまったので何とかすることにしました。

mt-keystrokes プラグイン

何とかするには、人間が 投稿 ボタンを押したときのみ、コメントを受け付けるようにすればいいわけです。これをシンプルに実現してくれるのが mt-keystrokes プラグイン

Keystrokes for Movable Type – cosmos blog
http://www.krcube.net/blog/archives/2009/06/keystrokes_for_movable_type.html

技術的には以下のようにして実現しています。

クライアントサイド
以下の場合に $FILED_NAME(初期値 : strokes)パラメータの値を 1 にする。

  • <textarea> 内で keypress イベントが起こったとき。
  • 投稿 ボタンで click イベントが起こったとき。
サーバーサイド
$FIELD_NAME パラメータが真値ならばコメントを受理する。

これだけです。シンプルですね。

尤も、シンプルであるが故に $FIELD_NAME パラメータに真値を与えればスパムコメントし放題です。初期値の strokes というのは余りに単純なので、別の値にした方がいいかもしれませんね。

インストール

ダウンロード

ダウンロードは公式サイトで行えばいいのですが、最新版の v0.1.5 と書いてあるリンクは 0.1.4 のものです。 何ですかね。この罠仕様。

というわけで、v0.1.5 へのリンクもまとめて貼っておきます。

MT-Keystrokes
http://overstated.net/projects/mt-keystrokes/
v0.1.5
http://overstated.net/projects/mt-keystrokes/keystrokes-0.1.5.tar.gz
http://overstated.net/projects/mt-keystrokes/keystrokes-0.1.5.zip

スクリプトの修正とインストール

解凍すると出てくる keystrokes.pl がプラグイン本体なのですが、これは MovableType v3 時代(古い!)のものなので、少々修正する必要があります。

--- keystrokes.pl.orig  2005-04-04 23:15:01.000000000 +0900
+++ keystrokes.pl       2012-09-23 09:15:24.000000000 +0900
@@ -63,7 +63,7 @@
 use MT::Plugin;
 use MT::Template::Context;

-return 1 unless $MT::VERSION =~ m(^3\.);
+#return 1 unless $MT::VERSION =~ m(^3\.);

 my $plugin = MT::Plugin->new({
     name => "MT-Keystrokes v$VERSION",
@@ -89,7 +89,7 @@
                my $keystrokes = 0;
                $keystrokes = $q->param($FIELD_NAME) if $q->param($FIELD_NAME);
                $eh->error("keystroke failed: " . $obj->email) if $LOG && $keystrokes < 1;
-               $eh->error("keystroke id: " . $obj->blog_id);
+        #$eh->error("keystroke id: " . $obj->blog_id);
                return $keystrokes > 0
        }
        else { return 1 }

後は必須ではありませんが、37 行目の $FILED_NAME は複雑なものに変えておくといいかもしれません。

our $FIELD_NAME = 'strokes';

修正が終わったら mt/plugins にコピーして、MovableType を再起動しましょう。

$ cp keystrokes.pl /path/to/mt/plugins
# MovableType の再起動(Plack/PSGI で稼働している場合)
$ cd /path/to/mt
$ sudo kill `cat pids/mt.pid`
# 従来通り Apache で稼働している場合
$ sudo /usr/sbin/apachectl graceful

設定

ここでは MovableType v5.2 の Smart Blog テーマ を使っているものとします。

コメント入力フォーム テンプレートを編集します。変更点は以下の 3 点です。

  • <form> タグ直下に <$MTKeystrokes$> タグを置く。
<form method="post" action="<$mt:CGIPath$><$mt:CommentScript$>"
  name="comments-form" id="comments-form" onsubmit="return mtCommentOnSubmit(this)">
<$MTKeystrokes$>
  • <textarea> タグに 記述を追加。
<textarea id="comment-text" name="text" required="required" onfocus="mtCommentFormOnFocus()"
  onkeypress="keystrokes(this.form)" >
  <mt:If   name="comment_preview"><mt:CommentBody autolink="0" sanitize="0"   convert_breaks="0" encode_html="1"></mt:If></textarea>
  • 投稿 ボタンに記述を追加。二箇所あるのでどちらも修正してください。
<input type="submit" accesskey="s" name="post" id="comment-submit"
  class="primary button" value="投稿"
  onkeypress="keystrokes(this.form)"
  />

以上です。後はブログ記事を再構築しましょう。

まとめ

簡単な修正でスパムコメントがすっぱりなくなってしまいました。効果覿面です。

上にも書きましたように $FILED_NAME パラメータが簡単に類推されてしまうのは欠点ですので、再構築のたびに値が変わるようにするといいかもしれませんね。

コメントを残す