WordPressのフォームスパムをハニーポットで防ぐ方法|ユーザーに負担をかけない対策

ハニーポットは、ボットにだけ見える「おとり」の入力欄を設置して、そこに文字が入った送信をスパムとして弾く手法です。訪問者には何も見えず、操作も一切求めないため、CAPTCHAのように問い合わせの離脱を招きません。この記事では、仕組みの理解からContact Form 7とログイン画面への導入手順、効かないときの対処、そして他の対策との組み合わせ方までを解説します。

目次

ハニーポットとは|ボットだけが引っかかる罠

A blue laptop displaying the WordPress logo on a speckled blue surface
Photo by Deng Xiang on Unsplash

ハニーポット(honeypot)とは、人間には見えない入力欄をフォームに紛れ込ませ、そこに値が入力された送信をブロックする仕組みです。名前のとおり「蜜の壺」で、ボットをおびき寄せるための罠です。

人間とボットの行動の差を使う

スパムボットの多くは、フォームの中にある入力欄を機械的にすべて埋めて送信します。人間はCSSで隠された欄が見えないので当然入力しませんが、ボットはHTMLを読んで埋めてしまう。この行動の差を利用して、人間かボットかを判別しています。

判定は一瞬で終わる

外部サービスへの問い合わせが発生しないため、判定はサーバー内で完結します。ページの読み込みが遅くなることもなく、通信環境の悪い場所からのアクセスでも影響がありません。

最大の利点は「訪問者が気づかない」こと

画像を選ぶ必要も、チェックボックスを押す必要もありません。フォームの見た目も変わらないため、デザインを崩さずに導入できます。対策を入れたことに誰も気づかない、というのが理想的な状態です。

CAPTCHAとの違い

項目ハニーポットCAPTCHA(reCAPTCHA・Turnstileなど)
訪問者の操作不要(存在に気づかない)不要〜画像選択が必要な場合あり
外部サービス不要(サイト内で完結)必要(アカウント登録・キー発行)
見た目への影響なしウィジェットやバッジが出る場合あり
表示速度への影響ほぼなし外部スクリプトの読み込みが発生
防御力単純なボットに有効高度なボットにも対応
導入の手軽さプラグインを入れて3分程度キー発行などの初期設定が必要

両者は競合するものではなく、性質が違う道具です。ハニーポットは「軽くて無害だが、賢いボットには効かない」、CAPTCHAは「効果は高いが、外部サービスへの依存と多少の摩擦がある」。だから実務では併用します。

Contact Form 7に導入する手順

Contact Form 7を使っている場合は、専用プラグインで3分程度で導入できます。

ステップ1|プラグインを入れる

管理画面のプラグイン追加から「Honeypot for Contact Form 7」を検索してインストールし、有効化します。Contact Form 7が先に入っている必要があるので、まだの場合はそちらから導入してください。

ステップ2|フォームの編集画面を開く

対象のフォームを開くと、フォームタグの生成ボタンに「honeypot」が追加されています。この時点でボタンが出ていなければ、プラグインが有効化されていないか、Contact Form 7のバージョンが古い可能性があります。

ステップ3|タグを生成する

項目名を入力してタグを作ります。名前は自由ですが、「your-zip」「your-address2」のように、いかにも入力欄らしい名前にするのがコツです。「honeypot」「trap」といった名前は、ボット側に見抜かれる余地を残します。

ステップ4|フォーム内に貼り付ける

[honeypot your-zip]

生成されたタグをフォームのコードに追加します。位置はどこでも構いませんが、他の入力欄に紛れる場所に置くほうが自然です。

ステップ5|画面に出ていないことを確認する

公開ページを開いて、追加した欄が画面に表示されていないことを確認します。見えていたら設置が正しくありません。テーマのCSSが干渉している可能性があるので、後述の対処を確認してください。

ステップ6|実際に送信してテストする

自分でフォームから送信し、通常どおりメールが届くことを必ず確認してください。ハニーポットは正規の送信を止めない仕組みですが、設置ミスがあれば正規の問い合わせまで弾かれます。ここを省略しないでください。

ログイン画面を守る|All In One WP Security

padlock on laptop with light trails
Photo by FlyD on Unsplash

スパムの入口はフォームだけではありません。総当たり攻撃(ブルートフォース)でログインを試みるボットも同様に、ハニーポットで弾けます。

設定する場所

「All In One WP Security & Firewall」を使っている場合、管理画面の「WPセキュリティ」→「総当たり攻撃」→「ハニーポット」から設定できます。ログインフォーム用と、ユーザー登録ページ用が別々に用意されています。

有効化すると何が起きるか

ログインフォームとユーザー登録ページに、ボット向けの隠し欄が追加されます。そこに入力があったアクセスは拒否されるため、機械的なログイン試行の多くを入口で止められます。人間がログインする分には、画面も操作も一切変わりません。

対象は2か所だけ

この機能の対象はログインフォームとユーザー登録ページの2か所です。問い合わせフォームは対象外なので、フォーム側は前述のContact Form 7用プラグインで別途対応する形になります。両方に入れて、はじめて全体をカバーできます。

有効化直後にやること

設定を保存したら、シークレットウィンドウで一度ログインを試してください。万一ログインできなくなった場合は、FTPやサーバーのファイルマネージャーからプラグインのフォルダ名を変更すれば無効化できます。この復旧手段を知らないまま設定すると、締め出されたときに慌てることになります。

効かない・弾かれるときの対処

a blue button with a white envelope on it
Photo by Mariia Berezovsky on Unsplash

症状1|隠し欄が画面に見えている

テーマのCSSが干渉して、非表示指定が効いていない状態です。この状態を放置すると、訪問者が親切に入力してスパム扱いされます。ブラウザの検証機能で該当の入力欄を確認し、必要ならCSSで明示的に非表示指定を追加してください。

症状2|スパムが減らない

隠し欄を認識して回避する高度なボット、あるいは人力で送信されているスパムです。ハニーポットの限界なので、CAPTCHAの追加を検討する段階です。

症状3|正規の問い合わせが届かない

まずハニーポット以外の原因(メールの送信設定、迷惑メールフォルダへの振り分け)を疑ってください。フォーム由来のメール不達は、スパム対策より送信設定が原因のことが多く、その場合はSMTPプラグインの設定で解決します。

症状4|ブラウザの自動入力が隠し欄を埋めてしまう

「your-zip」のように実在しそうな名前を付けると、ブラウザの自動入力機能が値を入れてしまうことがあります。正規の訪問者がスパム判定される原因になるため、実在の項目名と完全に同じにはせず、少しずらした名前にするのが安全です。

ハニーポットの限界と、併用の考え方

正直に書くと、ハニーポットは万能ではありません。隠し欄の存在を認識して回避する高度なボットには通用しないためです。スパムが完全にゼロになると期待して導入すると、期待外れに終わります。

それでも入れる価値がある理由

コストがほぼゼロだからです。訪問者に負担をかけず、外部サービスにも依存せず、表示速度にも影響せず、数分で入る。これで機械的な大量投稿の多くが止まるなら、費用対効果は十分に高いといえます。

層で守るという考え方

制作の現場では、スパム対策を次の順序で積み上げています。まずハニーポットで単純なボットを落とし、それでも残るものをCloudflare TurnstileのようなCAPTCHAで止める。ログイン周りは2段階認証やログイン試行の制限で固める。さらにメールサーバー側でも迷惑メールの設定を入れておく。1つの対策に頼らず、層で守るという考え方です。

積む順番の目安

順番対策訪問者への影響追加する目安
1ハニーポットなし最初に必ず入れる
2CAPTCHA(Turnstile)ごく小さいスパムが日に数件を超えたら
3ログイン試行制限・2段階認証管理者のみログイン攻撃のログが増えたら
4メールサーバー側の迷惑メール設定なし受信側で選別したくなったら

制作会社の視点|どこまでやるかの判断

people sitting on chair in front of table while holding pens during daytime
Photo by Dylan Gillis on Unsplash

対策を積むほど安全にはなりますが、その分だけ「正規の問い合わせが届かないリスク」も増えます。実際に多いのが、対策を重ねすぎた結果、フォームが動かなくなっているのに誰も気づいていないというケースです。

判断の目安はスパムの量

1日に数件程度ならハニーポットだけで様子を見て、それでも増えるならCAPTCHAを追加する。この順番なら、余計な仕掛けを入れずに済みます。最初から全部盛りにすると、どれが効いているのか、どれが問題を起こしているのかも分からなくなります。

1つ入れたら1回テストする

対策を1つ入れるたびに、必ず自分でフォームを送信してテストする。この手順を守るだけで、事故はほとんど防げます。まとめて入れてから確認すると、問題が起きたときに原因を切り分けられません。

問い合わせの導線を1本にしない

フォームが唯一の窓口だと、そこが詰まった瞬間に機会損失が発生します。電話番号やメールアドレスを併記しておけば、フォームが使えなかった人も連絡できます。対策とセットで逃げ道を用意する、というのが実務の鉄則です。

よくある質問(FAQ)

ハニーポットを入れると正規の送信も弾かれませんか?

隠し欄が正しく非表示になっていれば弾かれません。ただしテーマやCSSの影響で欄が見えてしまうと、訪問者が入力してスパム扱いになります。導入後は必ず画面上に欄が出ていないか確認してください。

ハニーポットとCAPTCHAはどちらを先に入れるべきですか?

ハニーポットからで構いません。訪問者への影響がゼロで、導入も数分だからです。それで足りなければCAPTCHAを追加します。

隠し欄の項目名は何にすればいいですか?

ボットが自動入力したくなる、一般的なフォーム項目に似た名前が有効です。ただし実在の項目名と完全に同じにすると、ブラウザの自動入力が働いてしまうことがあるため、少しずらした名前にしてください。

Contact Form 7以外のフォームでも使えますか?

フォームプラグインによっては同等の機能が標準で用意されています。独自に作ったフォームの場合は、隠し欄の設置とサーバー側の判定処理を自前で実装する必要があります。

ハニーポットで弾かれた送信内容は確認できますか?

基本的には破棄されるため、内容は残りません。誤検知が心配な場合は、Contact Form 7のログ機能や送信履歴を残すプラグインを併用して、しばらく様子を見るとよいでしょう。

ログイン画面のハニーポットは自分のログインに影響しますか?

通常は影響ありません。人間には隠し欄が見えないため、いつもどおりの操作でログインできます。念のため、有効化直後にシークレットウィンドウで確認しておくと安心です。

まとめ

ハニーポットは、訪問者に一切の負担をかけずに機械的なスパムを減らせる、費用対効果の高い対策です。Contact Form 7なら専用プラグインでタグを1つ追加するだけ、ログイン画面はAll In One WP Securityの設定を有効にするだけで導入できます。高度なボットには通用しない点だけ理解したうえで、まず最初の一手として入れておく価値があります。

スリーディープラスでは、フォームのスパム対策からWordPressのセキュリティ全般までご相談を承っています。「対策を入れたいが、問い合わせが届かなくなるのが怖い」という場合は、お気軽にお問い合わせください。

最新情報をチェックしよう!

LET’S CONTACT

お問い合わせ

デザインと発信の力で、お客様の強みや想いを形にし、
成果につながるコンテンツを制作します。
「うちの場合はどうなる?」という段階からでも、どうぞお気軽にご相談ください。