Movable Type がもともともっているしかけだけではスパムをふせぎきれなくなったので 「Movable Type のプログラム変更をともなうスパム対策の第 1 歩」 を実施したが,ここ数日,この方法ではふせげないスパムが大量におくられてきた. やむなく,Keystrokes for Movable Type に書かれた方法を第 2 歩として実施することにした. この方法も完璧とはおもえないが,とりあえずはスパムは完全にとめられている.
Keystrokes for Movable Type の方法においてはコメント欄へのコメント記入によるキーストロークをセンスすることによって,プログラムによるコメント生成を阻止しようとしている. キーストロークをセンスするには JavaScript の onkeypress という機能を使用している. この方法では keystrokes.pl というプラグインをダウンロードして Movable Type に追加する必要があるが,きわめてかんたんなしかけであり,keystrokes.pl をのぞけばブログの各項目のページにとじた方法になっている. 「第 1 歩」 では PHP のプログラムをかきかえたが,今回はそのプログラムは変更しない.
この対策を実施するまえには 1 分以下の頻度でスパムがおくられてくることもあったが,対策のおかげでそれはとまり,いまのところはしずかな状態になっている.
以下,エントリー・アーカイブ・テンプレートの変更点をしめす.
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form"
onsubmit="if (this.bakecookie.checked) rememberMe(this)">
<$MTKeystrokes$>
<input type="hidden" name="static" value="1" />
<input type="hidden" name="entry_id" value="<$MTEntryID$>" />
...
<p id="comments-open-text">
<label for="comment-text">コメント:
<MTIfAllowCommentHTML>(スタイル用のHTMLタグが使えます)</MTIfAllowCommentHTML>
</label>
<textarea id="comment-text" name="text" rows="15" cols="50"
onkeypress="keystrokes(this.form)">
</textarea>
</p>
...
<div id="comments-open-footer" class="comments-open-footer">
<input type="submit" accesskey="v" name="preview" id="comment-preview" value="確認" />
<input type="submit" accesskey="s" name="post" id="comment-post"
onclick="keystrokes(this.form)" value="投稿" />
</div>
2008-8-10 追記:
半月ちかくたったが,まだコメント・スパムはひとつもない.
強力だ.
2008-10-16 追記:
上記のパッチだけでは 「確認」 ボタンをおしたときに,うまくいかないことがわかった.
上記のと同様な textarea, input タグが Movable Type のデータのなかに数箇所あらわれるので,それをみなおなじようになおせばよいはずである.
「確認」 ボタンをおしたときに表示されるのはシステム・テンプレートのなかにある 「コメント・プレビュー」 テンプレートだが,ほかにも default_templates ディレクトリのもとに同様のテンプレートがあるので,あわせて修正した.
しかし,なぜかうまくコメントが投稿できなかった.
かんたんな方法は 「確認」 ボタンを表示しないようにすることである.
不便を感じるひともいるだろうが,投稿がうまくいかなくてまごつくよりは,ないほうがよいとかんがえて,表示しないようにした.
関連ページ (2008-8-10):
