Movable Typeのコメントスパム対策プラグイン「MT-Keystrokes」

スパムコメント対策プラグイン「MT-Keystrokes」の設置メモです。
MT-Keystrokesは「コメントフォームのテキストエリアに文字を入力する」または「投稿ボタンを押す」という操作をせずに投稿されたコメントをスパム扱いして投稿を失敗させるプラグインです。
コメント投稿者がJavaScriptを有効にしている必要はありますが、スパムを送信するプログラムからのスパムコメントを軽減することができます。
ダウンロード
こちらからプラグインをダウンロードします。
が、最新バージョンは0.1.5なんですが、ダウンロード用リンクは0.1.4のものになっています。
バージョン部分を書き換えて、MT-Keystrokes v0.1.5をダウンロードしました。
スクリプトファイルの修正
元々がMT3用のスクリプトということで修正が必要です。
そのままだと正常に動作しなかったり、「コメントは現在承認されるまで公開を保留されています」などのメッセージが表示され、投稿されたコメントが消滅してしまう(保留状態にもならない)ということが起こったりします。
plugins内の「keystrokes.pl」で以下の2箇所を修正します。
バージョンを変更
66行目辺りにMovable Typeのバージョンチェックを行っている箇所がありますので、そこを「3」から「6」へ変更します。
修正前
return 1 unless $MT::VERSION =~ m(^3\.);
修正後
return 1 unless $MT::VERSION =~ m(^6\.);
不必要な部分をコメントアウトする
92行目辺りの
$eh->error("keystroke id: " . $obj->blog_id);という部分をコメントアウトします。
修正後
sub _hdlr_comment_filter { my ($eh, $app, $obj) = @_; if (!$NOUSE{$obj->blog_id}) { my $q = $app->{query}; 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); return $keystrokes > 0 } else { return 1 } }
プラグインのアップロード
スクリプトファイルの修正をしたら、mtインストールディレクトリに「MT-Keystrokes」をアップロードします。
- /php
- /plugins
テンプレートの修正
コメントフォームやコメントプレビューのテンプレートにMT-Keystrokes用のタグを埋め込みます。
<form>タグの後に「<$MTKeystrokes$>」を追加します。
<form method="post" action="<$mt:CGIPath$><$mt:CommentScript$>" name="comments_form" id="comments-form" onsubmit="return mtCommentOnSubmit(this)"> <$MTKeystrokes$>
<textarea>タグ内に、onkeypressイベントを追加します。
<textarea name="text" id="comment-text" class="text" 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>タグ内に、onclickイベントを追加します。
<input type="submit" accesskey="s" name="post" id="comment-submit" class="primary button" value="Submit" onclick="keystrokes(this.form)" />
修正後、再構築をしたら設置完了です。
9/24 追記
エラー時のログを出したいので、こちらを参考にkeystrokes.plを修正して使っています。
sub _hdlr_comment_filter { my ($eh, $app, $obj) = @_; if (!$NOUSE{$obj->blog_id}) { my $q = $app->{query}; 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); $app->log({message => $app->translate("Comment save failed with [_1]", "keystroke failed"), blog_id => $obj->blog_id, class => 'comment', level => MT::Log::ERROR() }) if $LOG && $keystrokes < 1; return $keystrokes > 0 } else { return 1 } }
ログはこんな感じで出てきます。

参考サイト
下のボタンを押すと拍手送信&メッセージフォームが開きます。→WEB拍手お返事
Comment