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
パラメータが簡単に類推されてしまうのは欠点ですので、再構築のたびに値が変わるようにするといいかもしれませんね。