スパム投稿を防止する方法

申し込み画面とか、何かしらのフォーム画面を設置しておくと、そのうちスパム投稿の嵐に見舞われることがある。
例えば、申込画面だと申し込み後に管理者にメール送信なんてことしてると、メールがスパムで埋まる・・・

お客さんのサイトでそいうのに見舞われたところがあって、とりあえず対応することにした。
今のところ英語のみのスパムしかないサイトだったので、
「名前の欄に日本語が入力されていないとエラーにする」
という方法をとった。もう日本語が使えるユーザ限定のサイトしか使えないし、スパムで日本語を入れてくるのがあったら対策できないけど、その問題をクリアできてたのでこの方法を採用してみた。

Perlで組んでるプログラムだったので、jcode.plを使って下記のようにした。

require 'jcode.pl';
my ($match,$mojicode) = jcode::getcode(\$username);

if($mojicode eq ""){
                print 'エラー:名前は日本語を必ず含む必要があります。';
}

上記$usernameは、フォームから送信されるデータ(今回は氏名欄のデータ)が入っているという前提です。
getcode関数の引数は、リファレンスじゃないといけないので、バックスラッシュをつけている。

で、日本語が入ってれば、$mojicodeにsjisなどの文字列が入る。入ってなければ日本語が入力されていないということなので、エラーを出力。