メールフォームのスパム対策【コスパ重視】

この記事は約 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パラメータを後からセットするだけでかなり効果があり、実装コストの面からも有力候補となります。

webのお仕事お受けします💪

WordPressやJavaScriptのカスタマイズ、Google PageSpeed Insightsのスコア改善、エラー解消などのwebサイトの部分改修、効果の見えるweb広告初期設定・運用をランサーズMENTAなどでお受けしています。