blog.鶯梭庵

二〇〇四年 師走 卅日 木曜日

スパムコメント対策 [/this_blog/perl]

このブログを作るに当たって、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/&/&amp;/g;

s/&amp;([a-z]\w+);/&$1;/ig;

s/&amp;(#\d+);/&$1;/g;

s/</&lt;/g;

s/>/&gt;/g;

s/"/&quot;/g;


最後に、改行文字の処理をする。これについては、OHZAKI さんの perlメモに詳しい解説がある。

[この記事にコメントを書く。] [このカテゴリをまとめて読む。] [最新の記事を読む。]

RSS feed

最近のツイート

カテゴリ

[/language] (73)
[/links] (205)
[/mac] (97)
[/music] (36)
[/origami] (374)
[/this_blog/ajax] (7)
[/this_blog/blosxom] (4)
[/this_blog/history] (12)
[/this_blog/perl] (9)

最新記事

検察の「暴走」・その1 [/links]
Weekend Japanology に出演 [/origami]
算数における掛け算について [/links]
「折り紙公理」の形式化・その6 [/origami]
「折り紙公理」の形式化・その5 [/origami]
折り紙ティーセット [/origami]
「折り紙公理」の形式化・その4 [/origami]
「折り紙公理」の形式化・その3 [/origami]
ジョセフ・ウーさんのインスタレーション [/origami]
「折り紙公理」の形式化・その2 [/origami]
「折り紙公理」の形式化・その1 [/origami]
Ear-igami [/origami]
ファスナー [/language]
ハーフカットと折り紙 [/origami]
吉澤展開催中 [/origami]

羽鳥 公士郎