ホームページの問い合わせフォームに来るスパムを止める
自社サイトの問い合わせフォームに、英語の宣伝や意味不明な文面が毎日届く。本物の問い合わせが埋もれてしまう——これは多くの企業サイトが抱えている悩みです。
実は当社自身も、この問題に正面から取り組みました。今日は、自社サイトで実際に効果があった対策を、実装した側の視点でご紹介します。
フォームスパムの3つの型
1. 宣伝目的
「SEO対策しませんか」「格安でサイト制作します」といった営業メール。無害ですが、量が多いと本物が埋もれます。
2. SEOスパム
本文にURLを大量に貼るタイプ。問い合わせ内容がそのままサイトに掲載される仕組みを悪用して、被リンクを稼ごうとします。
3. 踏み台目的(最も厄介)
自動返信メールの機能を悪用する型です。フォームに他人のメールアドレスを入れて送信し、あなたの会社の名前で、無関係な第三者に大量のメールを送らせる手口です。
送信元はあなたの会社になるため、迷惑メール送信者として扱われるリスクがあります。
効果のあった4つの対策
当社サイトで実装し、実際に効果があったものを順に紹介します。
対策1:ハニーポット(見えない入力欄)
人には見えないが、プログラムには見える入力欄を設置します。CSSで非表示にしておき、ここに何か入力されていたら自動送信と判定します。
人間は見えないので入力しません。一方、機械的に全項目を埋めるプログラムは、うっかり埋めてしまいます。
重要なのは、弾いたときに「成功したフリ」をすること。 エラーを返すと、プログラムが対策に気づいて別の方法を試してきます。静かに破棄するのが効果的です。
対策2:電話番号の形式チェック
日本の電話番号は、必ず「0」で始まります(090、078、0120など)。
海外からの自動送信は +1-555-... のような形式を入れてくることが多いため、「0」始まりでない番号を弾くだけで、かなりの量が減ります。
日本国内向けのサイト限定の手ですが、効果は大きいです。
対策3:本文へのURL混入を拒否
問い合わせ本文にURLが含まれていたら拒否します。SEOスパムに直接効きます。
ただし正規の問い合わせでURLを送りたい方もいるため、判定は慎重に組む必要があります。当社では「http(s)://」「www.」「主要ドメイン」に絞り、型番の小数点などを誤検知しないようにしています。
対策4:フィールド名の文字化けチェック(最重要)
これは実際に運用してみて発見したものです。
あるスパムプログラム群は、日本語のフィールド名(「お名前」「電話番号」など)を正しく送信できていません。サーバーに届く時点で ??? に化けているのです。
厄介なのは、値(入力内容)は正常なまま届くこと。だから見た目では気づけません。しかし内部的には、
フォームの「電話番号」を取り出す→ 名前が一致せず取り出せない- 結果、上記の対策2・3が両方とも素通りする
という状態になっていました。対策を入れていたのに効いていなかったわけです。
正規のブラウザからフォームを送信する限り、フィールド名が化けることはありません。そこで「化けている=機械的な送信」と判断し、他のチェックより先に、送信ごと拒否するようにしました。
対策の順番が大事
実装してみて分かったのは、チェックの順番が結果を左右するということです。
- ハニーポット
- フィールド名の文字化けチェック
- 電話番号の形式チェック
- 本文のURLチェック
2番目を上流に置かないと、3・4が機能しません。順番を間違えると、対策があるのに効かないという状態になります。
CAPTCHAを使わなくても減らせる
「私はロボットではありません」のチェックは有効ですが、正規の利用者にも手間をかけます。特にご高齢の方や、スマホからの操作では離脱の原因になります。
上記4つは利用者に一切負担をかけません。まずこちらを試して、それでも足りなければCAPTCHAを検討する、という順序をおすすめします。
外部フォームサービスの注意点
無料のフォームサービスを使う場合、日本語(漢字・かな)を含む送信でエラーになるケースが実際にあります。当社でも一度この問題に当たり、自前実装へ切り替えました。
日本語のサイトでフォームサービスを選ぶときは、日本語の送信テストを必ず行ってください。
フォーム改善のご相談を承ります
「スパムが多くて本物が埋もれる」「自動返信が踏み台にされていないか心配」——こうしたご相談を承っています。
BULLCOM Security では、問い合わせフォームのスパム対策実装をご支援しています。当社サイトで実際に運用している構成をベースに、貴社の環境に合わせてご提案します。
現在お使いのフォームの点検だけでも構いません。お問い合わせフォームまたはLINEからお気軽にご相談ください。
