海外からの迷惑コメント投稿が増えてしまったので,一旦プレビューしないとコメントを投稿できないようにした。
迷惑コメントが増えてきた。このサイトでは,2バイト日本語文字が含まれているコメントだけを受け付けるという対策を行ってきた(nlog(n): 日本語限定コメントスパム対策)。迷惑コメントのほとんどは1バイト文字の方々であり,有用なコメントの投稿例は1件もなし。そこで,1バイト文字の方々はあっち行っちゃえ的な「鎖国」政策をとってきたのである。しかし,最近になってこれを破るコメントが増えてきた。記事の本文をコピペすることで,2バイト文字を含めてきたのである。「開国してく〜ださ〜いよぉ〜喜怒哀楽?」というメッセージなしに,いきなり大砲をバカスカ撃ってきたのだ。こりゃたまらんわい,と言うことで対策に踏み切ることにした。
最近は CAPTCHA (Captcha - Wikipedia) を使って対策するのがトレンドになっている。Movable Type 3.2 以降であれば,プラグイン一発でできる素敵な方法がある(Captcha Plugin公開 - Ogawa::Memoranda)。しかし,バージョン 2.6 などには対応していない。何か別の方法でやるしかない。
環境は Movable Type 2.661 である。ここでは MTHash プラグインを使うことにした(Forcing Comment Previews | Musings)。導入に関しては Going My Way: プレビューボタンのみ表示してhashを仕込むというコメントスパム対策 が参考になる。繰り返すが,これは旧バージョンの MT 用である。新バージョンは CAPTCHA を使うのがよい。
インストール手順は次の通り。
最後の手順で,Forcing Comment Previews | Musings にある通りのコードを追加してテストしてみると,動作はするのだが若干問題があることが分かった。
コメント投稿フォームで,プレビューせずにいきなり投稿しようとして「Post」をクリックしたとき,次のメッセージが表示されるようになる。
Comment Submission Error
Your comment submission failed for the following reasons:
Please preview your modified entry before posting it.
Please correct the error in the form below, then press Post to post your comment.
これはよい。一度プレビューしてねという「Movable Type からのメッセージ」だからである。問題は,上の表示の下に次のような「Perl からのメッセージ」が表示されてしまうことである。
このエラーは,コメント投稿フォームに subject, convert_breaks, validated の3つのパラメータが定義されていないために発生する。コメント投稿フォームからは「Post」ボタンを削除してしまうし,直接 CGI をたたいて迷惑コメントを送ってくるのはロボットだから,実害はなさそうに見える。しかし,システムのどこにインストールされているかが絶対パスで分かってしまうのは気分がよくない。そこで,Comments.pm に追加するコードに修正を加えることにした。
lib/MT/App/Comments.pm の「post」サブルーチン内に追加するコードを次のようにする。挿入する場所が分かるように,前後に元々の Comments.pm のコードを入れてある。
強調部分が,Forcing Comment Previews | Musings のコードと異なる部分である。
$sha1->add() の引数に使っているパラメータ author, email, url, subject および convert_breaks の定義をチェックし,最後の方でも validated の定義がされているかどうかのチェックを追加している。パラメータが定義されていない場合,空の文字列を入れているが,適当な文字列を入れてもよいだろう。これで Perl のエラーメッセージが表示されてしまうという問題は解決する。コメント投稿フォームに author, email, url の入力欄がない場合でも Perl がエラーを出さなくなる。
プレビュー画面以外からは投稿できず,プレビュー画面から投稿できることを確認すればOK。プレビュー画面の HTML ソースを見るとハッシュ値がどのように設定されているか分かる。
テストが終了したら,Individual Entry Archive テンプレートからコメント投稿用の「Post」ボタンを削除して終了である。必要があれば,Comment Listing Template などの(Comment Preview Template 以外の)テンプレートからも削除する。
迷惑コメントを指すのに「コメントスパム」という表現を使うことが多いが,迷惑メールを「メールスパム」って言わないよなと思い,最近は「迷惑コメント」と呼ぶことにしている。トラックバックについても同じように「迷惑トラックバック」で。「スパム」は誤解が生じやすいので使わない方向で(nlog(n): SPAM と spam は違うもの)。
コメント投稿に制限が多いのもよくないので,nlog(n): 日本語限定コメントスパム対策 はひとまず廃止で様子を見ることにした。
2014年4月14日追記:
この方法でも迷惑コメントが入るようになってしまったので,CAPTCHA を導入しました (nlog(n): Tiny Gimpy で迷惑コメント対策)。
Master Archive Index
Total Entry Count: 1957
コメント投稿テスト。
Posted by: n at November 10, 2006 01:49CAPTCHA は、色弱の人にとっては認識しづらい等の問題もあるようです。
Posted by: kirin_3 at November 13, 2006 17:45最近、随分と採用するサイトが増えているようですが、採用する際にはよく検討する必要がありそうです。
そうですね。視覚障害の人のアクセスを妨げてしまうことについては,Wikipedia にも記述があります。
http://ja.wikipedia.org/wiki/Captcha
CAPTCHA は,機械可読性を下げるのが目的なので,人間の可読性も下がってしまうのは当然です。ということは,人でも認識できなくなってしまうこともあり得るということになりますから,このあたりはとても難しいところだと思います。
現時点では,画像を認識して突破してくるロボットは少なそうです。幸いにも,
Posted by: n at November 15, 2006 01:39http://as-is.net/blog/archives/001132.html
は文字や背景の変更が可能になっていますので,気になるのであれば,背景画像を真っ白にしてしまってもいいのではないかと思います。問題が少し先送りにされるだけですが。