【Movable Type 移行記】その10
Posted by ramhorn05j
現在、一先ず落ち着いているコメントスパムですが、今後の為に何かしらの対策を施したいと考えていました。本格的なフィルタリングには、先日だめにうすでも取り上げられていたCAPTCHA技術が最適な方法に思われたので、早速、導入を検討しました。
→James Seng's Blog:Solution for comments apams
→phpspot開発日誌:CAPTCHA画像を作成してくれるサービス
→captchas.net
が、英語が理解できない私にはハードルが高く、日本語解説サイトも少ない為、早々に断念せざるを得ませんでした。ただ、手持ち無沙汰で諦めるのも癪なので、代替手段として、簡易的なスパム対策用のチェックボックスを用意しました。参考にしたのはこちら。
→C.G.I.:簡単SPAMコメント対策
基本的にそのまま丸写しです。
Comment Listing Template(コメントの一覧)
Comment Preview Template(コメント・プレビュー)
Commment Error Template(コメント・エラー)
Individual Entry Archive(エントリー・アーカイブ)
それぞれのテンプレートのFORM内に、パラメータ“spamprotect”を有効にするチェックボックスのHTMLを追加します。クッキー保存用のチェックボックスの下に挿入しました。
<p> <label for="comment-bake-cookie"> <input type="checkbox" id="comment-bake-cookie" name="bakecookie" tabindex="9" accesskey="r" onclick="if (!this.checked) forgetMe(document.comments_form)" onkeypress="if (!this.checked) forgetMe(document.comments_form)" value="1" /> 情報を保存しますか?</label> </p><p> <label for="spamprotect"><input type="checkbox" id="spamprotect" name="spamprotect" /> スパム対策の為、ここをチェックしてください</label> </p>
最後に、チェックボックスがチェックされているかを確認するスクリプトを
/MT/lib/MT/App/Comments.pm
に追加するのですが、該当する箇所が見つからなかったので、適当に入れておきました。250行目辺りのポイントに挿入。
if (!$q->param('text')) { return $app->handle_error($app->translate("Comment text is required.")); } if (!$q->param('spamprotect')) { return $app->handle_error($app->translate("Please check the 'Spam Protection' checkbox.")); }
正しい方法なのかどうかは定かではありませんが、一応これでおしまい。
投稿時にチェックボックスがチェックされているか否かで、スパム判定を行います。ノーチェックで投稿するとコメントの登録に失敗し、投稿そのものが受け付けられません。特に、日本語圏外からの自動投稿スパムに対しては、そこそこ有効な対策だと思われます。ということでお手数ですが、コメントを頂ける際は、スパム対策用のチェックボックスのチェックをお願い致します。