« 「考える脳考えるコンピューター」を読んで | Main | ダーリンの頭ン中 »

2005年06月15日

メールアドレスでコメントスパム対策

最近になって、大量にコメントスパムがやってきた。そこで、コメントスパム対策をした。

いろいろ手はあるが、僕が目をつけたのは下記の点。

  • スパマーはメールアドレスを記入することが多い。
  • 普通の人は、あまりメールアドレスを記入しない。
  • コメンテーターのメールアドレスは、特に必要ではない。

なので、メールアドレスに記入されている場合はスパムと(勝手に)判断して、コメント処理をエラーにしてしまう方法にすることにした。

コメントスパム対策いろいろ 【cgiカスタマイズ】を見ると、フォームの hidden 属性を追加して、その属性の有無でスパムを判断する方法が載っていた。これを応用して、


1.

mt-comments.cgi の

use strict;

以下に、下記コードを追加。

use CGI qw(:standard);
if ($ENV{'REQUEST_METHOD'} eq "POST") {
    my $data = param('email');
    if ( length($data) > 0 ) {
		print "Content-Type: text/html\n\n";
		print "An error occurred: $@";
		die;
    }
}

2.

管理画面で、「ウェブログの設定」→「設定」→「コメントの設定」の、「名前とメールアドレスを必須にしますか?」のチェックをはずす。したがって、名前を記入しなくてもコメント出来ちゃいます。まあ、どっちにしろ仮名で書かれればわからないから、問題ないかと。

もちろん、「未登録の読者からのコメントを受けつける」はチェックしておく。

3.

管理画面で、「テンプレート」→「アーカイブに関連したテンプレート」→「個別エントリーアーカイブ」をクリックして、

<input tabindex="2" id="email" name="email" />

の付近に、「スパム対策のため、メールアドレスは記入しないでください。」見たいな事を書いておく。ロジック的に必須ではないけど、UI 的に必須。保存も忘れずに。

4.

管理画面で、「サイトの再構築」をクリックし、「個別アーカイブだけ」を選択して「再構築」する。これをしないと、3. で記入した文が反映されない。

5.

めでたく対策された。


他の対策に比べていい点は、

  • ロジック的修正箇所が「mt-comments.cgi」だけで、仕組みが単純。
  • 英語のコメントに対しても通用する。(中には日本語だけを許可する対策もある)
  • コメンテーターに、チェックボックスにチェックしてもらうなどの負担がない。

問題点は、

  • コメンテーターのメールアドレスを知る手段がなくなる。
  • スパマーがメールアドレスを記入しなかった場合に効果がない。

ぐらいかな?

ともかく、Movable Type 自身でちゃんと何かしらの仕組みを入れてもらわないと困るのだが...

Tags:

Posted by ogaoga at 2005年06月15日 21:01

Trackback Pings

TrackBack URL for this entry:
http://www.ogaoga.org/mt33/mt-tb.cgi/246

Comments

と言うことで、コメントが正しく記入されるかのテスト。

Posted by: ogaoga at 2005年06月15日 21:06

参考になりました。ありがとうございます。構造が分かっているとこういう応用が出来るんだなぁ。と感心してしまいました。

Posted by: pure at 2005年06月21日 23:37

Post a comment





Remember Me?

(you may use HTML tags for style)