メールフォームのスパム対策【コスパ重視】
- 2021.07.13
- web
- JavaScript, スパム対策, セキュリティ, メールフォーム
この記事は約 3 分で読めます。
サイトのメールフォームから迷惑メールがたくさん来るようになったのだけど…
googleのreCAPTCHAなどは高性能ですがアカウントの管理面などが微妙にネックなので、もう少しシンプルにやりたいケース。
要点は、フォームのスパム送信のほとんどがロボットかつ外国から行われるということから、通常はformの送信先を示すactionパラメータはロボットに拾われないよう最初は空にしておき、日本語が入力されるべきところに英数字以外が入ったらJavaScriptによって本来のactionパラメータをセットします。※jQuery使用前提です
フォームHTMLの例
<form method="post" acthion="send.php" id="contact">
<input type="text" name="onamae" />
<input type="email" name="email" />
~
</form>
対策
formのactionパラメータを空にしたうえで、任意の箇所にjavascriptを記述します。
<form method="post" acthion="" id="contact">
$(window).load(function(){
var form = $('form#contact');
var name = $('[name="onamae"]');
function antispam(){
if(name.val().match(/^[A-Za-z0-9]*$/)){
form.attr('action', '');
}else{
form.attr('action', 'send.php');//actionパラメータをセット
}
}
form.change(antispam());//フォームが入力されたら判定
antispam();//ブラウザバックなどの初期入力に対応
});
こちらの例では英名のユーザーが送信できなかったり中国語は防ぐことができないなど汎用性に欠けますので状況に応じて調整となります。ただ実はロボットがjavascriptを実行してくるケースが少ないため、actionパラメータを後からセットするだけでかなり効果があり、実装コストの面からも有力候補となります。