«« 「世界に飛び出す日本のiPhone AppクリエイターとiPhone SDK」へ行ってきました | 真マジンガー 衝撃!Z編 第1話をやっと見た »»
久しぶりに自分のサイトに設置している掲示板をのぞいてみたら、スパムだらけだったorzという事はありませんか?
しかも気を取り直してメールボックスを開いてみたらレンタルサーバ会社から「容量がいっぱいです!」の警告メール。
サーバーを調べてみると原因は余りのスパム投稿で掲示板のテキストデータだけで100Mオーバー!!
しょうがないので消そうとするものの、掲示板の出力したテキストファイル数が大過ぎ。
FTPソフトからの接続が拒否!Telnetからコマンドで削除しようとしても途中で何度も中断されてしまう!
しかも調べてみるとこういう症状に陥っている掲示板が一つだけじゃない。
もうサイト運営止めようか・・・などと思わず心が折れそうに。
てなわけで、SPAMは掲示板へ投稿の時点で防ぐのが大事!
Perl系掲示板におけるいくつか対策例をご用意してみました。
フォームの登録処理の前に、下記のコードをいくつか取り出して自分の掲示板にあうようカスタマイズして付け足してください
※どこかのSPAM対策サイトのコードを拝借させていただいた部分もあります。ありがとうございます。
【前提:変数やサブルーチンについては以下のものとします】
$in{'comment'} | フォームから登録されたコメント部分 |
&error("Message") | エラー対応 |
1.ダミーの入力欄(E-MailやURL欄など)で、業者を誘う
SPAM業者は自動投稿ソフトを使って、色々な掲示板に対して注意文もろくに読まず一斉にマルチポストしているようです。
それを逆手に取って、入力はしてはいけない入力欄をあえて用意。一般ユーザー向けには「この欄は入力しないでください」としておきます。
で、投稿業者のロボットが罠にかかってに投稿してきたら、強制排除!という作戦です。
2.日本語や漢字が含まれていない文章の拒否
日本語でしか書いていないサイトなのに、英語で記入があったと思ったら「VIAGRA」
ということでコメントに日本語が含まれていなければ拒否します。海外からのSPAMがあまりにも多かったら有効。
なお、外国のユーザーさんを排除することになります。
また漢字は通りますので中国系スパムには弱いかも。
if ($in{'comment'} !‾ /(¥x82[¥x9F-¥xF2])|(¥x83[¥x40-¥x96])/) { &error("Please input Japanese (For an anti-spam measure)."); }
3.句読点が入力されていない文章の拒否
SPAM投稿は一般的な投稿と比較して、売り文句やURLが並んで句読点が含まれていない事が多いのでこれを拒否します。
なお、AAや一行レスをよく使うフランクな掲示板では不便になるかも。
my @period = ("、",",","。","."); my $flag = 0; foreach (@period ) { if ($in{'comment'} =~ /$_/) {$flag = 1; last;} } if (!$flag) { &error("句読点を書いてください。"); }
4.URL登録回数を一定数までに制限
複数サイトのSEO対策を狙って、やたらリンク先を記載するタイプのSPAMを弾きます。
ブックマーク・お勧めリンク先紹介系掲示板では厳しいかも?
$countUrl = 3; # URLの記述可能数\n my(@countURL2); @countURL2 = split(/http/, $in{'comment'}); if($#countURL2>$countUrl) { &error("SPAM対策の為、URLの記載は $countUrl 回までに制限しています。ご了承下さい。"); }
※$#countURL2>$countURLの間に空白を入れると「Unrecognized character」エラーが発生するので注意
5.NGワードのチェック
下記のプログラム例ではメールアドレスで使われる「@」がコメント内に含まれているとエラーが発生するようにしています。
@NGword =("@"); # NGワード my($i, @countNG); for($i = 0; $i < $#NGword+1; $i++) { @countNG = split($NGword[$i],$in{'comment'}); if($#countNG > 0) { &error("SPAM対策の為、".$NGword[$i]."はNGワードに指定しています。ご了承下さい。"); } }
他にNGワードを追加したい場合、例えば「無料」「出会い」「援助」が含まれるコメントも弾きたい場合、1行目の @NGword =("@"); を
@NGword =("@","無料","出会い","援助");
というように付け加えてください。
なお、あまりNGwordが多いとサーバーの負荷が高くなりますので程々に。
おまけ
今回からソースコードの部分に「Syntax Highlighter」を導入してみましたが、どうでしょう?
投稿者 kuze : 2009年4月 9日 20:56
«« 「世界に飛び出す日本のiPhone AppクリエイターとiPhone SDK」へ行ってきました | 真マジンガー 衝撃!Z編 第1話をやっと見た »»
コメント