i-Willink

サイト運用i-Willink

問い合わせフォームのスパム対策は重ねがけで

問い合わせフォームのスパムは、1つの対策では止まりません。WordPress の Contact Form 7 を例に、性質の違う対策を重ねる順番と、本物の問い合わせまで止めていないかの確かめ方を、公式の説明をもとにまとめます。

問い合わせフォームのスパムは、1つの対策では止まりません。性質の違う対策を、お客さんの手間が少ない順に重ねます。

フォームを置くと、宣伝や怪しいリンクを貼った自動送信が来るものと考えておきます。放っておくと、本物の問い合わせがその山に埋もれて見落とされます。スパム対策は、迷惑を減らす作業である以上に、問い合わせの取りこぼしを防ぐ作業です。

どの対策にも、すり抜けと、本物を誤って止めてしまう失敗の両方があります。だから1つに頼らず、何枚か重ねます。この記事では、WordPress で広く使われている Contact Form 7 を例に、重ねる順番と、入れたあとの確かめ方をまとめます。

この記事の要点

  1. 1対策は1枚では足りない。お客さんの手間が少ない順に、性質の違う対策を重ねる
  2. 2Contact Form 7 なら、Akismet・禁止語句リスト・Turnstile(または reCAPTCHA)が公式に用意されている
  3. 3入れたら必ず自分でテスト送信し、本物の問い合わせが届くことを確かめる。いちばん怖いのは本物まで止めること

なぜ1枚では止まらないのか

自動送信にはいくつもの種類があり、1つの対策が効くのはその一部だけだからです。

雑に大量に送ってくるもの、人間のふりをして入力欄を1つずつ埋めるもの、人が手で貼り付けて送ってくるもの。スパムの送り方はいろいろです。ある対策が得意な相手は、別の対策では素通りします。

Web サイトを狙う自動化された攻撃を整理している OWASP(Web の安全性を扱う国際的な非営利団体)の資料でも、自動化された不正な利用は種類ごとに性質が違うものとして分けて扱われています。だから、性質の違う対策を重ねて、1枚目をすり抜けたものを2枚目で止める、という考え方をとります。

1枚目: お客さんに見えない対策から入れる

最初は、本物のお客さんに何の手間もかけない対策を入れます。

Akismet で中身を判定する。Contact Form 7 は、WordPress のコメントのスパム判定でおなじみの Akismet と連携できると公式に案内しています。送られてきた中身をもとに、スパムらしいものを振り分けてくれます。

ハニーポット(おとりの入力欄)。人には見えない入力欄を1つ置き、そこに何か書いてあれば機械の送信と判断する仕組みです。Contact Form 7 では追加のプラグインで入れます。配布ページのある代表的なプラグインは、ブラウザの自動入力がおとりの欄を埋めないようにする対応を入れてきました。それでも、利用者の声には「すべてをスパム扱いした」という報告もあります。入れたら、必ず後で書くテスト送信で確かめてください。

2枚目: 明らかにおかしい送信を弾く

決まった言葉や送信元が続くなら、禁止語句リストで止めます。

Contact Form 7 は、特定の言葉を含む送信や、特定の IP アドレスからの送信を止める「禁止語句リスト(Disallowed list)」に対応しています。WordPress の「設定」→「ディスカッション」にある同じリストを使います。このリストは WordPress のコメント欄の判定にも使われる点に注意してください。

同じ宣伝文句や同じ URL が何度も来るなら、それを足していきます。ただし、よく使われる言葉を入れると本物の問い合わせまで止まります。足すのは、本物のお客さんがまず書かない言葉だけにします。

止めたい送信元の IP アドレスを知るには、Contact Form 7 のメールの本文に [_remote_ip] と書いておくと、届くメールに送信元の IP アドレスが出ます。

あわせて、フォーム側でメールアドレスの形式や必須の欄をきちんと設定しておくと、雑な自動送信はそれだけで落ちます。

3枚目: それでも止まらなければ人間かどうかを確かめる

最後の1枚が Turnstile や reCAPTCHA です。公式は Turnstile を勧めています。

Contact Form 7 は、Cloudflare の Turnstile と Google の reCAPTCHA の両方と連携できます。公式サイトは「reCAPTCHA を使う理由が特になければ Turnstile を勧める」としています。

Turnstile の入れ方は、公式の説明では次のとおりです。

  1. Cloudflare で Turnstile のウィジェットを作り、サイトキーとシークレットキーを控える(モードは「Managed」が推奨)
  2. WordPress の管理画面で「お問い合わせ」→「インテグレーション」を開く
  3. Turnstile の欄でキーを貼り付けて保存する

保存すると、すべてのフォームに自動で入ります。表示する場所を変えたいときは、フォームの中に [turnstile] と書きます。

この種の確認は、まれに本物のお客さんにも手間をかけます。1枚目と2枚目で足りているなら、無理に足さなくて構いません。

入れたら必ずやること: 本物が届くかのテスト

対策を足すたびに自分でテスト送信し、メールが届くところまで確かめます。

スパム対策でいちばん怖い失敗は、スパムが残ることではありません。本物の問い合わせまで止めていて、誰も気づかないことです。止められたお客さんは、たいてい何も言わずに去ります。

対策を1枚足すたびに、次の3つを確かめます。

  • パソコンとスマホの両方から、普通の内容でテスト送信する
  • 受け取る側のメールに届いたか、迷惑メールのフォルダに入っていないかを見る
  • ブラウザの自動入力を使って送ってみる(おとりの欄が自動入力で埋まっていないかの確認)

そのあとも、月に1回はテスト送信をします。プラグインの更新やサーバーの変更で、知らないうちにメールが届かなくなることがあるからです。

今日から始める順番

まずテスト送信、次に見えない対策、最後に確認の仕組み、の順に進めます。

  1. 今のフォームでテスト送信し、ちゃんと届くことを確かめる(基準を作る)
  2. Akismet かハニーポットを入れて、もう一度テスト送信する
  3. 1〜2週間様子を見て、同じ文面のスパムが続くなら禁止語句リストに足す
  4. それでも多ければ Turnstile を入れて、テスト送信する

一度に全部を入れないのは、本物が止まったときにどの対策が原因かを分かるようにするためです。

よくある質問

Contact Form 7 のスパム対策は、何から始めればいいですか?

お客さんに手間をかけない対策から始めます。Akismet との連携か、ハニーポットのプラグインが向いています。入れたら必ず自分でテスト送信して、メールが届くことを確かめます。

reCAPTCHA と Turnstile はどちらを使えばいいですか?

Contact Form 7 の公式サイトは、reCAPTCHA を使う理由が特になければ Turnstile を勧めています。どちらも管理画面の「お問い合わせ」→「インテグレーション」でキーを入れるだけで、すべてのフォームに入ります。

ハニーポットで本物の問い合わせが止まることはありますか?

あります。ブラウザの自動入力がおとりの欄を埋めると、本物の送信が機械と判断されることがあります。代表的なプラグインは対応を入れていますが、入れたあとに自動入力を使ったテスト送信で確かめるのが確実です。

スパムが来なくなったら、もう確認しなくていいですか?

月に1回はテスト送信を続けます。スパムが来ないことと、本物が届くことは別の話です。プラグインの更新やサーバーの変更で、問い合わせのメールが届かなくなることもあります。

参考・出典

AI 導入の支援

仕事の手間を、仕組みに任せませんか。

AI と業務システムの導入を支援しています。自分たちで回して確かめた仕組みだけを入れます。最初の相談は無料です。

相談する

最新記事をメールで受け取る