Honeypot は、フォームの利用者には見えない入力欄や、通常なら触られない項目を用意して、機械的な送信(ボット)を見分けやすくするスパム対策です。名前は、攻撃者やボットをおびき寄せる「蜜の壺(ハニーポット)」に由来します。
初心者向けに言うと、人は触らないけどボットは埋めやすい罠 を置いておくイメージです。その欄が埋まっていたら、自動送信の可能性が高いと判断して弾けます。画像認証のように利用者の操作を増やさないので、reCAPTCHA と比べて利用者体験を壊しにくいのが強みです。
実務での実装
よくある実装は、人には見えないダミーの入力欄を1つ置く方法です。CSSで画面外へ飛ばす・透明にするなどして隠し、autocomplete を切っておきます。その欄に値が入っていたらボットとみなして送信を弾きます。あわせて、フォーム表示から送信までの時間が極端に短い場合に弾く「時間トラップ」を組み合わせることもあります。
よくある誤解・注意点
隠し方には配慮が要ります。単純に display:none だけだと、一部のボットに見抜かれたり、逆にスクリーンリーダーの利用者が触れて誤検知になることがあります。アクセシビリティを壊さない隠し方(ラベルやaria属性の工夫)を意識します。また、honeypot 単体では巧妙なボットは防ぎきれないため、レート制限や入力検証、必要に応じてreCAPTCHAと組み合わせるのが実務の定石です。「見えない罠だから完璧」ではなく、複数の対策の一枚として使うのが正解です。
どんな場面で使うか
問い合わせフォーム、会員登録、コメント投稿、資料請求など、誰でも送信できる公開フォームでよく使われます。特に、利用者に手間をかけさせたくない(離脱を避けたい)フォームで、まず入れておく軽い防御として相性がよい対策です。ボットによる大量のスパム投稿や、捨てアドレスを使った自動登録を減らしたいときの、費用のかからない第一歩になります。