フォームを設置すると、アクセスの少ないページでもわりとコメントスパムの餌食になります。
<form method="POST" action="https://somewhere.com/form">
メールアドレス <input type="email" name="email">
<button type="submit">送信</button>
</form>
reCAPTCHA を使えば手軽で安心ですが、それすらも面倒くさいときのネタ半分なアイデアです。
<form method="POST"
action="https://localhost"
data-foo="https://somewhere.com/form"
onsubmit="if(confirm('「キャンセル」を押してください。スパム対策です。')) { return false; } else { this.action = this.getAttribute('data-foo'); return true; }"
>
メールアドレス <input type="email" name="email">
<button type="submit">送信</button>
</form>
まず、本来の送信先action
をdata-foo
などに記述し、action
はhttps://localhost
などのダミーにします。
これでDOMレベルでスクレイピングしてくるボットにはほぼ対策できます。
親切に https://www.cia.gov/
とかに送らせてもいいかもですね! (冗談ですが)
次にonsubmit
で、確認ダイアログを表示し、人間殿には敢えてキャンセル
を選んでもらいます。
キャンセルが選ばれると、action
にdata-foo
の値(本来の送信先)を移し、return true
でフォームの内容を送信します。
実は**「フォームの内容を送信します。よろしいですか?」** と、お決まりのワンクッション挟んでいても、それを突破してくるスパムボットがありました。それで逆にする発想に繋がりました。
認知的負荷が高く、コンバージョン率を落としてしまいますが、ブラウザの挙動を再現するタイプのボットにはこれでさらに対策できます。