5つの掲示板スパム対策例(Perl編) : つねづね思ふこと

«« 「世界に飛び出す日本のiPhone AppクリエイターとiPhone SDK」へ行ってきました | 真マジンガー 衝撃!Z編 第1話をやっと見た »»

5つの掲示板スパム対策例(Perl編)

2009年4月 9日

このエントリーをはてなブックマークに追加
SPAMは投稿の時点で防ぐのが大事!Perl系掲示板に役立つ5つの改造対策例をご紹介します!1.ダミーの入力欄(E-MailやURL欄など)で、業者を誘う / 2.日本語や漢字が含まれていない文章の拒否 / 3.句読点が入力されていない文章の拒否 / 4.URL登録回数を一定数までに制限 / 5.NGワードのチェック


久しぶりに自分のサイトに設置している掲示板をのぞいてみたら、スパムだらけだった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が多いとサーバーの負荷が高くなりますので程々に。

 

ネット限定恋愛革命 スパムメール大賞
サエキ けんぞう
辰巳出版
売り上げランキング: 398799
おすすめ度の平均: 5.0
5 まさに発想の勝利
5 記録に残してくれた
5 爆笑!!!!スパムがこんなに面白くなっちゃって。

 


おまけ
今回からソースコードの部分に「Syntax Highlighter」を導入してみましたが、どうでしょう?


投稿者 kuze : 2009年4月 9日 20:56


■このエントリーに関連した記事

■「実用ソフト&サイト」カテゴリの最新記事

«« 「世界に飛び出す日本のiPhone AppクリエイターとiPhone SDK」へ行ってきました | 真マジンガー 衝撃!Z編 第1話をやっと見た »»


自己紹介
PHPやVBによるコーディングやシステムエンジニアを仕事にしています。
主にiPhoneアプリの紹介やWeb開発などのPC系の話題と、アニメやゲームなどのサブカルな話題を取り扱っています。

[PR]

instagram

カテゴリ

最近のエントリー

最近掲載した画像
  • 映画『ゴジラ-1.0』レビュー(ネタばれあり)
  • Three-up HC-T2206WHで狭い部屋も快適に
  • 「君たちはどう生きるか」は父親を気にするかで評価が別れそう(ネタバレあり)
  • 画像生成AIソフトでしばらく毎日SNSに画像を上げてみたけどネタ出しについて
  • ホットクックを使えば一人で並行して色々作りやすくなるのでオススメ
  • ホットクックを使えば一人で並行して色々作りやすくなるのでオススメ
  • ホットクックを使えば一人で並行して色々作りやすくなるのでオススメ
  • Python3.4向けにつくったAPIが、Python3.6では動かなくなったので直してみた

RSS
更新情報はRSSをご利用下さい