Hushfort

CAPTCHA を使わずに WordPress のお問い合わせフォームのスパムを防ぐには?

執筆:Eureka Studio · 更新日

要点

CAPTCHA の代わりに、目に見えないチェックを組み合わせます。ボットだけが入力する隠しハニーポット欄、最小入力時間、ページキャッシュがあっても機能するトークン、そして IP ごと・メールアドレスごとの送信上限です。判断が難しいメッセージは削除せずに隔離しましょう。サーバー内で完結するプラグインなら、データを外部に送らずに Elementor、Contact Form 7、WPForms でこれを実現できます。Hushfort では、フォームプラグインの保護は Pro の機能で、無料版が守るのはコメントとレビューだけです。

手順

  1. 1手順 1

    ボットがフォームを狙う様子を見る

    ボットは見つけた欄をすべて埋めます。人には見えない隠し欄も例外ではありません。ページを読み込まずに直接送信してくることもあります。Hushfort のログには、ハニーポット欄の入力、トークンなし、入力が速すぎる、リンクが多すぎる、といったケースごとの理由が記録されます。

    スパムシールドの「ログと隔離」の表。WPForms のお問い合わせフォームへの送信が、トークンなし、IP ごとの上限を超過、ハニーポット欄が入力された、リンクが多すぎる、という理由とともに並んでいる
  2. 2手順 2

    スパムシールドを監視モードでオンにする

    Hushfort で「スパムシールド」を開いてオンにし、「モード」を「記録のみ — 監視モード (何もブロックしません)」に設定します。Hushfort Pro を導入済みなら「フォームプラグイン」はオンのままにして保存します。この状態では、まだ何もブロックせず、ブロックする予定だったものを記録します。

    スパムシールドがオンで、モードが「記録のみ — 監視モード (何もブロックしません)」に設定されている
  3. 3手順 3

    目立たない上限を設定する (Pro)

    「最小入力時間」は短め (3 秒) にします。Pro では、さらに 1 つの IP (IP ごとの上限) や 1 つのメールアドレス (メールアドレスごとの上限) から 1 時間に送れるメッセージ数を制限します。「リンクの最大数」を超えるリンクを含むメッセージは隔離されます。

    スパムシールドの上限設定: 最小入力時間 3 秒、IP ごとの上限 1 時間あたり 5、メールアドレスごとの上限 1 時間あたり 3、リンクの最大数 2
  4. 4手順 4

    ログを確認してから「ブロック」に切り替える

    数日たったら、監視モードが捕らえたものを確認します。本物のメッセージが含まれていなければ、「モード」を「ブロック (推奨)」にして保存します。

    スパムシールドのモードを「記録のみ」から「ブロック (推奨)」に変更して保存したところ
  5. 5手順 5

    本物の人はそのまま送信できる

    訪問者は 30 秒ほどかけて入力し、隠し欄に気づくこともなく送信します。パズルも画像の選択もありません。

    訪問者がデモストアのお問い合わせフォームに入力して送信し、フォームに「Thanks for your message」と表示される

なぜ重要なのか

フォームスパムはたいてい単なる迷惑ですが、それだけでは済まなくなることもあります。本物の問い合わせが埋もれ、受信トレイを流し読みする癖がつき、フォームが自動返信を送る設定ならメールサーバーの送信レピュテーションを下げることもあります。アクセスの多いサイトでは、送信のたびにフォームプラグインのすべての処理が走るため、サーバーの処理時間も奪われます。

よくある解決策の CAPTCHA は、そのコストを訪問者に押し付けます。訪問者はパズルを解かされ、一部は諦め、プライバシー保護ツールを使う人は先に進めなくなります。CAPTCHA サービスの多くは外部のコードを読み込み、訪問者のデータをサーバーの外に送ります。

もっと静かな方法があります。ボットには、人とは違う振る舞いがあり、それを気づかれずにチェックできるのです:

  • 隠し欄を埋める。 ハニーポットとは、人には見えないものの HTML には存在する欄です。人は空のままにし、ボットは入力します。
  • 速い。 人がフォームを埋めるには数秒かかります。ボットはミリ秒で済みます。
  • 繰り返す。 1 つの IP や 1 つのメールアドレスから 1 時間に 10 通も届くなら、それは顧客ではありません。
  • リンクを貼り付ける。 リンクだらけのメッセージが本物の問い合わせであることはまずありません。

よくある間違い

  • 隔離せずにブロックする。 チェックで判断がつかないときは、メッセージを確認用に残しましょう。本物の顧客の質問を消してしまうことは、スパムを 1 通読むことよりもずっと悪い結果です。
  • いきなり「ブロック」にする。 数日間は記録のみのモードで始めてください。ブロックさせる前に、何がブロックされていたかを確認しましょう。
  • キャッシュで壊れるトークン。 スパム対策のトークンがキャッシュされたページの一部になっていると、訪問者全員が期限切れの同じトークンを共有することになります。ページの読み込み時にトークンを取得する保護を使ってください。
  • チェックが 1 つだけ。 ハニーポットだけでは単純なボットしか止められません。入力時間のチェックと上限を加えましょう。

プラグインを使わない方法

ほとんどのフォームプラグインには、この基本的な仕組みが組み込まれています:

  • Elementor Pro のフォーム: フィールドの一覧から「Honeypot」フィールドを追加します。
  • Contact Form 7: アドオンでハニーポットを追加します。そのサービスへのデータ送信を受け入れるなら、CF7 は Akismet にも対応しています。
  • WPForms: スパム対策トークンが組み込まれており、各フォームの設定で任意のハニーポットも使えます。

自分で管理しているフォームなら、簡単なハニーポットを手作業で追加することもできます:

<div style="position:absolute;left:-9999px" aria-hidden="true">
  <label>Leave this empty <input type="text" name="website" tabindex="-1" autocomplete="off"></label>
</div>
<?php
if ( ! empty( $_POST['website'] ) ) {
    wp_die( 'Spam detected.', 403 );
}

限界もあります。やり方はフォームプラグインごとに異なり、フォームをまたいだ共通の送信上限はたいていなく、誤判定を拾う隔離もなく、コメントやレビューには何の対策もありません。結局、同じ考え方を 5 回設定することになります。

うまくいかないときは

  • 本物のメッセージが届かなくなった。 スパムシールドを監視モードに切り替えてテスト送信し、ログを見てどのチェックに引っかかったかを確認してください。
  • 一部の訪問者だけフォームが失敗する。 保護を有効にした後、一度ページキャッシュを削除してください。
  • それでもスパムが届く。 リンクの上限を下げる、ブロックリストに単語やドメインを追加する、あるいは既知のメールプロバイダーからのみ受け付けるべきフォームで厳格モードをオンにしてください。

Hushfort なら

Hushfort Security は無料の WordPress セキュリティプラグインで、Hushfort Pro はその上に追加する有料アドオンです。

Hushfort のスパムシールドは、無料版でコメントと WooCommerce のレビューを守ります。フォームプラグインには Hushfort Pro が必要で、人気の 6 つ(Elementor Pro、Contact Form 7、WPForms、Gravity Forms、Fluent Forms、Forminator)が同じ画面に加わります。

  • 目に見えないハニーポット、最小入力時間、ページキャッシュがあっても機能する署名付きトークン。トークンは、Cookie を使わない約 2 KB の小さなスクリプトが取得します。
  • Pro: デフォルトの上限は IP ごとに 1 時間あたり 5 件、メールアドレスごとに 1 時間あたり 3 件。リンクが 2 つを超えるメッセージは隔離されます。
  • Pro: 約 9,900 の使い捨てメールアドレスのドメインリスト、独自のブロックリスト、ワードフィルター。
  • Pro: 「スパムではない」から学習する隔離機能。
  • 監視モードがあるので、実際にブロックする前に何がブロックされるかを確認できます。

CAPTCHA も外部 API も不要で、フォームのデータがサーバーの外に出ることは一切ありません。

よくある質問

ハニーポットで本当にフォームスパムを防げますか?

見つけた欄をすべて埋める自動ボットの大半は防げます。賢いボットの中には隠し欄を飛ばすものもあるため、ハニーポットの後ろに入力時間のチェックと IP ごとの上限を置いています。

なぜ reCAPTCHA を避けるのですか?

本物の訪問者にとって手間が増え、プライバシー保護ツールを使う人ではうまく動かないことがあり、訪問者のデータを第三者に送るからです。Cookie の同意表示が必要になると感じるサイト運営者も多くいます。

ページキャッシュを使っていても機能しますか?

トークンをキャッシュされた HTML に埋め込まず、ページの読み込み時に取得するなら機能します。そうでないと、訪問者全員が同じ古いトークンを受け取り、フォームの送信が失敗します。

どのフォームプラグインに対応していますか?

Hushfort Pro では、スパムシールドが Elementor Pro のフォーム、Contact Form 7、WPForms、Gravity Forms、Fluent Forms、Forminator に対応します。無料版が対応するのは、コメントと WooCommerce のレビューだけです。

スパムのようでも本物かもしれないメッセージはどうなりますか?

Hushfort Pro では、削除されずに隔離されます。「スパムではない」にすると届けられ、シールドはそこから学習します。

不具合の報告・機能のリクエスト

メッセージは Hushfort の開発チームに直接届きます。

内容の種類

返信にのみ使用します。

これらの情報は返信のためだけに使用します。 プライバシー