単純だけど強力なスパム対策

普段週末はブログ書かない事にしているんですが三連休なんでちょろっと書いておきます。
と、言っても自分の仕事の覚書も兼ねてですが。

CGIで動作する掲示板などのプログラムを使っているとスパム書き込み対策には頭を悩ませますね。
特に普及率の高いと思われる、KENT-WEBのyybbsやWebforumなどは標的になりやすいみたいです。(現在配布されている最新版のプログラムにはスパム対策が施されていますので安心です)

今回自分もCGIでプログラムを組んでいる時にメールフォームを組み込む段になってスパム用の対策をしなければとちょっと調べてみました。

最初はCAPTCHA(文字=アルファベットや数字がグニャリとなるやつです)を使って出来ないかな?と考えていたのですが、あるブログのエントリーを見て考えを改めました。

どう考えてもあのグニャグニャした画像って読み取りづらいですよね。
だからこそ効果があるのかもしれませんが、解読するのが大変。
そのブログエントリーは、わざわざ読みづらいCAPTCHAを使うよりも、もっと単純で分かりやすい方法があるだろという趣旨でした。

今のスパムの99%は専用のプログラムを使っていると仮定すると、スパム投稿排除のための文字列入力を必須にするのが簡単でしかもスパム対策として強力ではないか?

さらに英語圏からのスパムに対しても効果が高い方法として推奨されていたのが、日本人なら誰でも知っているような問題を出し、回答を入力させるという方法。

対策方法はこういったものです

例えば 日本の首都は? といった質問の答え(もちろん東京)をスパム対策用のキーにする場合

どのCGIプログラムでも基本的にやる事は同じ

1.設定部分にスパムキー用の設定を追加する

jcodeなどを読み込む部分があると思いますが、そこに以下のような形で変数を追加します

# スパムキー
$spamkey = ‘日本の首都は”;

$skey = ‘東京’;

2.フォーム内容をデコードするルーチン部分に上記変数用の記述を追加
例えば以下のような感じ

#スパムキー用
$skey = $FORM{‘skey’};

3.投稿を書き込むフォーム部分にスパムキー用のテキストボックスを追加
例)

スパム投稿排除のため<font color=red>$spamkey</font>を入力して下さい。&nbsp;<input type=text name=skey size=8 maxlength=8>

4.最後に登録処理部分にスパムキーが入力されていない場合エラーを出すように追加

例)

# スパムキー処理追加

if ($skey ne “$skey”) { &error(“投稿キーが違います”); }

こんな感じでOKなはずです。

スパムキーの問題になる部分を画像表示にしてもOKですし、もし破られてまたスパムが投稿されるようになったら、問題を変えればOK
その場合も1.の設定部分を変更するだけなので楽だと思います。

CGIプログラムによっては、複数のファイルに設定やフォーム部分、レジスト(登録部分)などが分かれている場合がありますが、テキストエディタなどで開いて周辺の文字列で検索をかければ見つけることは出来ると思いますよ。

とりあえずこんな感じで、単純だけども結構強力なスパム対策が出来るかと思います。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク

コメント

  1. 5代目 より:

    効果はバッチリですね( ´∀`)b
    確かにあのグニャリとした文字は自分が見づらいですしw

  2. サウザー より:

    スパム対策に手間をかけるのも時間が勿体ないので、良い方法ですね。

  3. 管理人 より:

    >5代目さん

    確かに効果絶大でしたね。
    他の部分にも導入したいもんです。

    >サウザーさん

    根本的な解決にはなりませんが、ある程度の効果は見込めます。
    破られた時の対処も簡単なんで手間の割には良い対処法かな。