Captcha Plugin movabletype スパムコメント対策

Ogawa::Memorandaで公開されているCaptcha Plugin
を入れたのだが、かなり苦労したので同じような苦労にあっている
人向けに何をどうしたかを書いてみる。

まずやりたかったのは、下のスパム対策でよくある、
コメント入力前にランダムな文字を入力するあれである。

そして、なおかつ
文字の背景画像を自分で好きな物に変えたかった
ということにつきる。追加で言えばフォントも変えたかったが
a-zまで用意する手間が面倒でやめたのと、
文字を変形させるときのノイズの入り具合も変えたいところだったが
そこまではコードを追っていないのでわからない。

背景画像の変更なのだがOgawa氏が
プラグインを公開した時のエントリーのコメントで

“最後にcaptcha_js.cgiを編集して
「output_folder => ‘./images’,」の行の後に以下のように追加するだけです。
images_folder => ‘画像ファイルのディレクトリ’,”

と書いているが、バージョンアップでこれが変わっている。
実際には
data_folder => File::Spec->catdir($dirname, ‘data’),
の下の行に、
images_folder => ‘イメージを入れたPath’
を書かなくてはならない。13行目が追加されることになる。

僕の場合は
images_folder => ‘/home/jlove/public_html/cgi-bin/mtのおいてあるところ/plugins/captcha/img’

とかにした。
画像は配布されているものの背景画像だけ変更したものを
uploadした。ちなみにここにlzhでupしてある

次に、エントリーアーカイブで
<script type=”text/javascript” src=”<$MTCaptchaJsURL$>”></script>
というjavascript呼び出しをコメント用のform要素の内部に記述すれば良いのだが、

いくらやっても画像も入力欄も表示されない。

ソースを見ると、
src=”<$MTCaptchaJsURL$>” この部分はきちんとスクリプトの位置を表示しているし、
問題ない。

このURLを叩いてスクリプトを直接表示してみると、
if (!commenter_name)  という文章が。

実はこれが原因で表示されていなかった。

というのは、このブログのテンプレートはmovabletypeのバージョン2.7あたりから
そのまま継続して使っており、
MT3から導入されたTypeKeyの認証を使っていない。

commenter_nameはTypeKey認証まわりで使われているらしく、
僕の場合はいらない。

ということで

captcha_js.cgiの最後の方、

print $q->header(‘text/javascript’);
print “if (!commenter_name) {\n”;
print “\tdocument.writeln(‘$_’);\n” foreach split(/\r?\n/, $tmpl);
print “}\n”;

print $q->header(‘text/javascript’);
print “\tdocument.writeln(‘$_’);\n” foreach split(/\r?\n/, $tmpl);

と直して動かしてみると、あっさり動作した。

以上。

このコメントスパム対策は非常に強力で、
これまで1ヶ月で数千のスパムがあったが
それがきれいに0になった。すばらしい。