申し込み画面とか、何かしらのフォーム画面を設置しておくと、そのうちスパム投稿の嵐に見舞われることがある。
例えば、申込画面だと申し込み後に管理者にメール送信なんてことしてると、メールがスパムで埋まる・・・
お客さんのサイトでそいうのに見舞われたところがあって、とりあえず対応することにした。
今のところ英語のみのスパムしかないサイトだったので、
「名前の欄に日本語が入力されていないとエラーにする」
という方法をとった。もう日本語が使えるユーザ限定のサイトしか使えないし、スパムで日本語を入れてくるのがあったら対策できないけど、その問題をクリアできてたのでこの方法を採用してみた。
Perlで組んでるプログラムだったので、jcode.plを使って下記のようにした。
require 'jcode.pl'; my ($match,$mojicode) = jcode::getcode(\$username); if($mojicode eq ""){ print 'エラー:名前は日本語を必ず含む必要があります。'; }
上記$usernameは、フォームから送信されるデータ(今回は氏名欄のデータ)が入っているという前提です。
getcode関数の引数は、リファレンスじゃないといけないので、バックスラッシュをつけている。
で、日本語が入ってれば、$mojicodeにsjisなどの文字列が入る。入ってなければ日本語が入力されていないということなので、エラーを出力。