WEBサイトを運営していてメールフォームを設置すると、遅かれ早かれスパム投稿に悩まされるようになります。
メールフォームのスパム対策には、画像認証を付けるなど、いくつかの方法があるのですが、より簡単に実装できるのが、JavaScriptによるフォーム値の上書き方法です。
どういう方法かというと、フォームにhiddenタグを埋め込みトークンを値にセットします。このトークン値をPOSTされる際に、JavaScriptにより書き換えてしまうというものです。
以下、具体例です。
(略) <input id="token" type="hidden" name="token" value="some_token"> <input onclick="change_token();" type="submit" value="送信"> </form>
上記コードには、hiddenタグに、トークンとして、some_tokenがセットされています。
この状態で送信すると、原則的には、スパムは、token=some_token を送信してきます。
この原則を、JavaScriptの関数により変更します。つまり、送信ボタンが押されたときに、トークンの値を書き換えて、その書き換え後の値でなければ、スクリプト側でスパムとして送信を弾くようにします。
JavaScriptは次のようになります。(外部ファイルにする場合)
function change_token(){ var token = 10 * 10; document.getElementById('token').value = token; }
ここでは、例として、トークンの値を10 * 10 の100 としています。送信されたスクリプト側(PHPなど)で、入力チェックをするのですが、このtokenの値が100でなければスパムによる送信と判断するわけです。
スパムは、JavaScriptを実行しないことを利用したものですが、何も対策をしないよりは効果があると思います。
以上です。