Contact Form 7でスパムが届く原因と対策|実際に使った方法を紹介
悩む人
・対策をしてみたものの効果がなく、どうにかスパムを減らしたい
Contact Form 7でフォームを設置したら、英語の宣伝やよくわからない問い合わせが届くようになった。そんな経験はありませんか?
今回はContact Form 7に関するトラブルとして、フォーム設置後にスパム問い合わせが届いてしまう原因と対策について解説します。
お問い合わせフォームにスパムが届く主な原因は、BOTと呼ばれる自動化プログラムによって、フォームへの入力・送信が機械的に行われるためです。
スパムの数が増えると、本来確認すべき問い合わせが埋もれてしまい、商談や相談のメールを見落とす原因にもなります。
小さなウェブ集客のミカタ 阿部
この記事では、当サイトで実際に行っている対策も交えながら、Contact Form 7のスパムを減らす方法を紹介します。
なお、フォームからの通知メールが迷惑メールフォルダに入ってしまう場合は、原因が異なります。こちらの記事で解説しています。
あわせて読みたい
Contact Form 7のメールが迷惑メールになる原因は?確認すべきポイントと対処法
この記事を読むContact Form 7でスパムが届く主な原因
Contact Form 7でスパムが届く原因のひとつは、Web上に公開されたお問い合わせフォームをBOTに発見され、自動送信の対象にされることです。
BOTはWebサイトを巡回しながらフォームを探し、入力項目を解析して自動的に内容を送信します。
特に、
/contact//inquiry//form/など、お問い合わせページでよく使われるURLは推測しやすいため、フォームを発見されるきっかけのひとつにはなります。
ただし、URLが分かりやすいこと自体がスパムの直接的な原因ではありません。
仮にURLを複雑な文字列へ変更しても、Webサイト内からリンクされている以上、BOTに発見される可能性はあります。
そのため、URLを隠すのではなく、フォーム側でBOTからの送信を判定・制限することが重要です。
Contact Form 7でできる主なスパム対策
Contact Form 7で比較的導入しやすいスパム対策として、主に次の2つがあります。
・ハニーポットを設置する
サイトの規模やスパムの量にもよりますが、まずはこの2つから対策を始めるのがおすすめです。
reCAPTCHAを導入する
reCAPTCHAは、Googleが提供しているBOT・不正アクセス対策サービスです。
アクセス時の挙動などをもとに、人間による操作なのかBOTによる操作なのかを判定し、不審な送信を減らすことができます。
現在のreCAPTCHA Essentialsでは、1組織あたり月10,000件までの攻撃が無料の範囲となっています。小規模なWebサイトであれば無料枠内で収まるケースも多いですが、アクセス数や利用サイト数によっては上限を確認しておきましょう。
また、Google reCAPTCHA以外の選択肢として、Cloudflare Turnstileがあります。
TurnstileはCloudflareが提供しているCAPTCHA代替サービスで、CloudflareのCDNを利用していないWebサイトにも導入できます。無料プランでも利用できます。
サイトの構成や運用方法に合わせて選ぶとよいでしょう。
ハニーポットを設置する
ハニーポットとは、BOTの自動入力を利用してスパムを判定する仕組みです。
通常の利用者には見えない入力欄をフォーム内に用意し、その項目に値が入力された場合にBOTによる送信と判断します。
イメージとしては、
↓
BOTがフォーム内の項目を自動入力
↓
隠し項目にも入力される
↓
スパムとして判定
という仕組みです。
ユーザー自身にCAPTCHAの操作を求める必要がなく、通常の問い合わせ時の操作をほとんど増やさずに導入できるのがメリットです。
Contact Form 7では、ハニーポット機能を追加できるプラグインもあるため、必ずしも自分でコードを書く必要はありません。
ハニーポットだけでは十分でない場合もある
ハニーポットは導入しやすい一方で、万能な対策ではありません。
単純なBOTであれば有効ですが、BOT側がHTMLを解析し、
・画面上に表示されているか
・入力項目の種類
・requiredなどの属性を判断している場合、ハニーポットの入力欄を避けて送信される可能性があります。
そのため、ハニーポットは、
「これだけで完全にスパムを防ぐもの」
ではなく、
「単純なBOTを低コストで除外するための対策」
と考えた方がよいでしょう。
当サイトでも、ハニーポット単体ではなくreCAPTCHAなどと組み合わせています。
日本語入力を必須にする
最後に日本語入力の必須化です。よくあるスパムの文章で英文だけの文章やランダムの文字列が並んでいるものなどはこちらの方法で機械的に弾くことができます。
本記事では代表的な
・ひらがな・カタカナ・漢字のいずれかを含んだ文章を許可する場合
の2例をご紹介しています。
ただし日本語入力の必須化にはPHPコードを編集する必要があるので若干ハードルが高めです。
※PHPファイルに関しては記述を間違えると最悪サイトが映らなくなってしまうこともあるので、編集する際は必ずバックアップを取るようにしましょう。
ひらがなを含んだ文章のみを許可する場合
function wpcf7_validation_textarea_hiragana($result, $tag) {
$tag = new WPCF7_FormTag($tag);
$name = $tag->name;
$value = isset($_POST[$name])
? trim(sanitize_textarea_field(wp_unslash($_POST[$name])))
: '';
if (!empty($value) && !preg_match('/[ぁ-ん]/u', $value)) {
$result->invalidate($tag, '日本語(ひらがな)を含めて入力してください。');
}
return $result;
}
add_filter('wpcf7_validate_textarea', 'wpcf7_validation_textarea_hiragana', 10, 2);
add_filter('wpcf7_validate_textarea*', 'wpcf7_validation_textarea_hiragana', 10, 2);
ひらがな・カタカナ・漢字のいずれかを含んだ文章を許可する場合
function wpcf7_validation_textarea_japanese($result, $tag) {
$tag = new WPCF7_FormTag($tag);
$name = $tag->name;
$value = isset($_POST[$name])
? trim(sanitize_textarea_field(wp_unslash($_POST[$name])))
: '';
if (!empty($value) && !preg_match('/[ぁ-んァ-ヶ一-龠々]/u', $value)) {
$result->invalidate($tag, '日本語を含めて入力してください。');
}
return $result;
}
add_filter('wpcf7_validate_textarea', 'wpcf7_validation_textarea_japanese', 10, 2);
add_filter('wpcf7_validate_textarea*', 'wpcf7_validation_textarea_japanese', 10, 2);
PHPの編集が不安な場合は、設定だけをお任せいただくこともできます。
そのほかのスパム対策
そのほかの対策としてはサーバー側でできるセキュリティ設定が該当します。
具体的には
・短時間の連続送信を制限する
といった形になります。
海外IPからのフォーム送信を制限する
運営しているホームページの商圏が日本国内に限られている場合は、海外IPからのフォーム送信を制限する方法も有効です。
たとえば、地域密着型の店舗や教室、国内向けサービスなど、海外から問い合わせが入る可能性がほとんどないサイトでは、不要なスパムを大きく減らせる場合があります。
具体的には、Cloudflareやサーバー側のアクセス制御を利用して、海外IPからお問い合わせフォームへのアクセスや送信を制限します。
運用しているサーバーによって異なりますが、大手レンタルサーバーの
あたりであればサーバー側で標準機能としてコントロールパネルから操作のみで「ON/OFF」を切り替えられます。
ただし、ECサイトや海外在住者からの問い合わせを受け付ける可能性があるサイトでは、正常なユーザーまでブロックしてしまうため注意が必要です。
また、IPアドレスの位置情報判定は100%正確ではありません。海外IPを一律で拒否するより、可能であればお問い合わせフォームへのPOST送信だけを制限するなど、影響範囲を狭くする方法がおすすめです。
短時間の連続送信を制限する
海外IP制限だけでは防げない場合は、同一の送信元IPから短時間に繰り返されるフォーム送信を制限する方法も有効です。
たとえば、同じIPアドレスから1分以内に何十件も送信されているといった挙動は、通常の問い合わせではほとんど発生しません。
そのため、
一定回数を超えたら一時的にブロックする
同じ内容が繰り返し送信された場合に拒否する
といった対策を行うことで、大量送信型のスパムを減らせます。
実装方法としては、CloudflareのWAF・Rate Limiting、サーバー側の制限、WordPress側のプラグインや独自処理などがあります。
ただし、同一IPが必ずしも同じ端末とは限りません。会社・学校・施設などでは複数人が同じグローバルIPを共有していることもあるため、制限を厳しくしすぎると正常な問い合わせまで弾いてしまう可能性があります。
当サイトで実際に使っているスパム対策
当サイトではハニーポット+reCAPTCHA+海外IP制限を行っています。
イメージとしては海外IP制限と ハニーポットで機械的に明らかなスパムを減らし、reCAPTCHAで精査をおこなうイメージです。
なぜ1つの対策だけに頼らないのか
当サイトでは、イメージとして以下のように役割を分けています。
→ 商圏外からの不要な送信を減らす
ハニーポット
→ 単純な自動入力BOTを除外する
reCAPTCHA
→ BOT判定をさらに補強する
このように複数の対策を重ねることで、1つの仕組みを回避された場合でも、別の対策でスパムを減らせるようにしています。
ただし、スパム対策を強くしすぎると正常な問い合わせまで弾いてしまう可能性があります。
そのため、スパムを完全にゼロにすることよりも、正常な問い合わせを取りこぼさない範囲で減らすことを優先しています。
Contact Form 7でスパム対策をするときの注意点
スパム対策は、厳しくすればするほど良いというわけではありません。制限を強くしすぎると、正常なお問い合わせまで誤ってブロックしてしまう可能性があります。
特に海外IP制限では、IPアドレスの位置情報が必ずしも正確とは限りません。
小さなウェブ集客のミカタ 阿部
このように、IPアドレスによる地域判定には誤差が発生する可能性があります。
そのため、海外IPを一律で強く制限する場合は、正常なユーザーまで巻き込む可能性があることを念頭に置いて設定することが大切です。
また、海外からの問い合わせが想定されるECサイトや、海外在住者を対象とするサービスでは、海外IP制限そのものが適さない場合もあります。
スパム問い合わせではなく通知メールが迷惑メールになる場合
ここまで紹介したのは、
「お問い合わせフォームにスパム投稿が送られてくる問題」
への対策です。
一方で、Contact Form 7から送られた通知メールがGmailなどの迷惑メールフォルダに入ってしまうという場合は、原因が異なります。
この場合は、
・DKIM
・DMARC
・Fromアドレス
・メールの送信経路
などを確認する必要があります。
詳しくは以下の記事で解説しています。
あわせて読みたい
Contact Form 7のメールが迷惑メールになる原因は?確認すべきポイントと対処法
この記事を読むまとめ|Contact Form 7のスパム対策はハニーポットとreCAPTCHAがおすすめ
今回は、Contact Form 7でスパム問い合わせが届く原因と、その対策について解説しました。
導入のしやすさと効果のバランスを考えると、まずは
reCAPTCHAなどのBOT対策
を組み合わせる方法がおすすめです。
さらにスパムが多い場合は、
・短時間の連続送信制限
などを追加し、段階的に対策を強化するとよいでしょう。
ただし、対策を厳しくしすぎると、正常な問い合わせまでブロックしてしまう可能性があります。
スパムを完全にゼロにすることよりも、必要な問い合わせを取りこぼさず、不要な投稿を減らすことを優先して設定することが大切です。
スパム対策が心配な方へ、お気軽にご相談ください
悩む人
「PHPのコードを触るのが怖くて、手が出せない」
小さなウェブ集客のミカタでは、サイトの状況に合わせたスパム対策の設定を承っています。
どの対策をどこまで入れるべきかのご提案から、reCAPTCHAやハニーポットの導入、日本語入力の必須化まで対応できます。状況の確認は無料です。