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] (59)
[/links] (155)
[/mac] (87)
[/music] (31)
[/origami] (274)
[/this_blog/ajax] (7)
[/this_blog/blosxom] (5)
[/this_blog/history] (16)
[/this_blog/perl] (9)

最新記事

折り紙ボウル [/origami]
Apple、2つの大失態 [/mac]
tessellation と corrugation [/origami]
Windows Vista のピントが外れたキャンペーン [/links]
折り紙フォント [/origami]
You may want to [/language]
ポール・ジャクソンさんのインタビュー [/origami]
ジョセフ・ウーさんのインタビュー [/origami]
Skype を使うと盗聴される? [/links]
折り紙をモチーフにしたデザインいろいろ [/origami]
OrigamiUSA コンベンション・フォトレポート [/origami]
地球温暖化の嘘 [/links]
0.999... = 1 という式について [/links]
不切一枚折り畳み椅子 [/origami]
折り紙風?ファッション [/origami]

毎日見るサイト

-> Slashdot
-> Boing Boing
-> ITmedia
-> デイリーポータルZ
-> 新しもの好きのダウンロ〜ド
-> MACお宝鑑定団
-> MLB(日本語)
-> NFL(日本語)
-> GetUpEnglish

毎日聞くラジオ

-> WNYC2
-> BBC Radio 3
-> NHK FM

製作に関わっているサイト

-> 折紙探偵団
-> TidBITS 日本語版
-> 日本 HP

羽鳥 公士郎