自社サイトに問い合わせフォームを設置したら、英語の宣伝メールや意味のわからない投稿が毎日届くようになった——。中小企業や個人事業主のサイトで、本当によく起きる問題です。フォームは「誰でも送れる」窓口だからこそ、自動化されたプログラム(bot)の格好の標的になります。

最初に思いつく対策は画像認証(CAPTCHA)でしょう。ただ、それ一つに頼ると、巧妙なbotは通り抜ける一方で、肝心の人間のユーザーに余計な手間をかけさせてしまうこともあります。この記事では、当サイトのフォームで実際に組み合わせている3つの対策——ハニーポット・送信タイミングの検証・Cloudflare Turnstile——を、仕組みと狙いから紹介します。

フォームのスパム対策3層(ハニーポット・送信タイミング検証・Cloudflare Turnstile)の図解

そもそも、なぜフォームはbotに狙われるのか

フォームへのスパムは、人が手で一件ずつ送っているわけではありません。Web上を巡回するbotが、フォームを自動で見つけて機械的に大量送信しているケースがほとんどです。botは人間とは違う振る舞いをします。たとえば「項目を一瞬で埋めてすぐ送信する」「人間なら気づく隠し項目にも反応する」といった具合です。

逆に言えば、その“振る舞いの違い”を手がかりにすれば、利用者に負担をかけずにかなりの割合を弾けます。次の3つは、それぞれ違う角度からbotらしさを見抜く対策です。

対策1:ハニーポット(人間には見えない罠)

ハニーポット(おとり)は、フォームに「人間には見えない入力欄」をひとつ仕込む手法です。CSSで画面の外に隠してあるため、通常のユーザーがそこに入力することはありません。一方、多くのbotはHTMLを機械的に読み取り、見つけた欄をすべて埋めようとします。

  • 隠し欄に入力があった送信は、botと判断して破棄する
  • 利用者には何も表示されず、操作の手間はゼロ
  • 外部サービスに依存しないため動作が軽い

とてもシンプルな仕組みですが、無差別にフォームを埋めていく単純なbotには非常に効果的です。

対策2:送信が「速すぎる/古すぎる」を見抜く

人間がフォームを読み、入力し、送信するには、どんなに速くても数秒はかかります。一方、botはページを開いた瞬間に送信することも珍しくありません。そこで、フォームを表示した時刻を記録しておき、送信までの経過時間をサーバー側でチェックします。

  • 表示から数秒も経たない送信は「速すぎる」としてbot扱い
  • 何時間も放置された古いフォームからの送信は「期限切れ」として弾く
  • 時刻は改ざんできないよう、署名を付けて埋め込む

ポイントは、時刻をそのまま隠しフィールドに入れるのではなく、サーバーだけが知る鍵で署名しておくことです。こうしておけば、botが時刻を書き換えて「ちょうどよい経過時間」を偽装することを防げます。

// フォーム表示時刻を署名付きで埋め込み、送信時に経過時間を検証する(概念図)
const MIN_SECONDS = 3;             // これより速い送信はbot扱い
const MAX_SECONDS = 2 * 60 * 60;  // 2時間で失効

const elapsed = (Date.now() - 表示時刻) / 1000;
if (elapsed < MIN_SECONDS) reject("速すぎる");
if (elapsed > MAX_SECONDS) reject("期限切れ");

対策3:Cloudflare Turnstile(新しいCAPTCHAのかたち)

3つ目が、Cloudflareが提供する「Turnstile」です。従来の「信号機の写真をすべて選んでください」のような画像認証に代わる認証サービスで、多くの場合、利用者は何も操作しないか、チェックを一つ入れるだけで通過できます。裏側でブラウザの状態を解析し、人間らしさを判定する仕組みです。

  • 無料で利用でき、Cloudflareの利用者でなくても使える
  • 広告目的の個人データを集めない、プライバシー重視の設計
  • 発行されるトークンは1回限り有効で、約5分(300秒)で失効する

当サイトでは、確認画面でTurnstileのトークンを発行し、送信時にサーバー側で「そのトークンが本物か」を検証しています。検証に通らない送信は、メール送信の処理まで到達しません。

1つに頼らず「多層」で守る

ここまでの3つは、どれか一つだけで完璧というものではありません。単純なbotはハニーポットで、機械的な高速送信はタイミング検証で、より巧妙なものはTurnstileで——というように、性質の違う関門を重ねることで取りこぼしを減らします。

botをふるい分ける順番の図解

さらに、ハニーポットとタイミング検証は利用者に一切の操作を求めません。そのため「スパムは減らしたいが、問い合わせのハードルは上げたくない」という相反する要望を両立できます。フォームは、サイトと見込み客をつなぐ大切な入口です。スパムに埋もれて本当の問い合わせを見逃さないよう、入口の守りは地味でも丁寧に作っておく価値があります。

サイトの問い合わせフォームのスパムにお困りでしたら、お問い合わせからお気軽にご相談ください。仕組みのご説明から、既存サイトへの導入まで対応できます。

本記事は2026年6月時点の情報です。Cloudflare Turnstileの仕様や提供条件は、変更される場合があります。