二〇〇四年 師走 卅日 木曜日■ スパムコメント対策 [/this_blog/perl]この記事は書かれてから1年以上経過しています。内容が古くなっている可能性があります。コメントの受付は終了しました。 このブログを作るに当たって、blosxom で作られたブログをいくつか見たのだけれど、スパムコメントが結構書き込まれていた。そこで、立ち上げたときにはコメント機能を外していて、コメントが書き込まれたらメールで知らせてくれる機能を追加してからコメントが書き込めるようにしたのだが、すぐにスパムコメントが来た。いったいどこから嗅ぎつけてくるのやら。 はじめは、手動でスパムコメントを消していたが、それを毎日するのも面倒なので、以下の対策をしたところ、スパムコメントがなくなった。 データの読み込みには、CGI モジュールを使っている。 use CGI ':cgi'; $CGI::POST_MAX = 1024 * 4; my $error = cgi_error; こうすると、4KB より大きなデータが送られてきたとき、そのデータは捨てられて、$error にエラーメッセージがセットされる。送られてきたデータが空だったとき、$error が true だったら、データが大きすぎたということだし、$error が false であれば、もとから空だったということが分かる。4KB というのは甘い制限のような気もするが、ある程度長い書き込みでも、まともな内容なら受け付けたい。 次に、それぞれの項目について、以下の正規表現にマッチするかどうか調べて、マッチしたら書き込まない。 m{<[a-z/!].*>}is コメントに HTML タグが含まれていれば、これに引っかかる。HTML じゃなくても引っかかる可能性はあるが、現実的には問題にならないだろう。私のところにあったスパムコメントは、いかがわしいサイトへのリンクを含んだ HTML だったので、これでスパムが止まった。 次に HTML 特殊文字のエスケープ。HTML エンティティの入力は受け付けるようにした。 s/&/&/g; s/&([a-z]\w+);/&$1;/ig; s/&(#\d+);/&$1;/g; s/</</g; s/>/>/g; s/"/"/g; 最後に、改行文字の処理をする。これについては、OHZAKI さんの perlメモに詳しい解説がある。 |
カテゴリ
[/language] (98) 最新記事
◇ パスワードについてのあなたの常識はもはや非常識かもしれない・その1 [/links] |