目からウロコなメールフォーム(お問い合わせフォーム)のスパム対策
メールフォーム(お問い合わせフォーム)を悪用するスパム
Webサイトに設置されたフォームに氏名やメールアドレス、メッセージなどを入力して送信ボタンを押すだけで、管理者にメールが送れる便利な仕組み。それがメールフォーム(お問い合わせフォーム)です。
Webブラウザのみで使えるため来訪者の利便性が高く、管理者としてもメッセージを確実に確認できます。このため、来訪者からの意見や質問のために使用されます。
が、管理者への確実な連絡手段である点を悪用し、サイト内容に関係のないメッセージを一方的に送りつけるのがスパムです。
例えば、簡素な説明とURLだけを記述して特定サイトへと誘導する通販系迷惑メッセージもそのひとつ。
連絡用のメールフォームでは、セキュリティの関係でテキストデータのみを扱うことが多く、この場合システムに対する直接的な被害はありません。単純にウザいだけ、とも言えるでしょう。
けれども、中には悪意を持ったサイトへの誘導が紛れているかもしれないのです。
そんなスパムのたぐいは、可能であれば撃退したいもの。例えばWordPressのプラグインである"Contact Form 7"を使っているなら、Googleの"reCAPTCHA"を使用するなどの対策があります(詳しくはこちらの記事にて)。
ここでは、それとは別の切り口でメールフォーム(お問い合わせフォーム)のスパム対策について考えてみたいと思います。
【スパム対策その1】bot(ボット)を寄せ付けない命名方法
以前は手入力のスパムも見られましたが、現在ではbotと呼ばれるプログラムが、メールフォーム(お問い合わせフォーム)の検知からメッセージの送信までを自動的に行うのが主流となっています。
この方式なら、送信者は簡単なコマンドを実行するだけで、星の数ほどあるWebサイトのメールフォームを使い、それぞれの管理者にメッセージを送ることができるのです。
けれども、やみくもにサイトを巡っていたのでは非効率的。「数撃ちゃ当たる」方式のbotとしては、如何に短時間で多くのメールフォームを攻略するか、がキモとなります。
このため、botはメールフォームを効率的に検出するためのルールに従って動作します。
例えば、メインのhtmlファイルに"Contact"や"MailForm"などの文字列があり、そこにリンクが設定されている場合、リンク先にはメールフォームが設置されている可能性が高くなります。
加えて、公開されているhtmlファイルの名称が、"contact.html"や"mailform.html"であった場合、これらはメールフォームの本体ファイルである可能性がある訳です。
これらのルールを逆手に取って、そこから外れるようにすれば、botからメールフォームを隠すことができる、という次第です。具体的に気を付けるのは以下の2点。
メールフォーム(お問い合わせフォーム)へのリンク名に英語表記を使わない
まずはリンク名に関してですが、"Contact"などの英語名を使ってはいけません。botのルールに合致してしまいます。この場合、"お問い合わせ先"や"コンタクト"などの日本語表記を使いましょう。
とは言え、無理に2バイトコードを使う必要はありません。例えば"Otoiawase"のようにローマ字表記の日本語でも構いません。
ほとんどのbotは英語圏をターゲットとしているため、日本語表記はサポート外。このため、botはメールフォーム(お問い合わせフォーム)へのリンクであると認識できない訳です。
ワールドワイドな対応のため、どうしても英語表記が必要な場合には"Contact"と書かれたグラフィックファイルを用意し、これにリンクを貼るなどしましょう。
メールフォーム(お問い合わせフォーム)のファイル名にわかりやすい文字列を使わない
こちらはメールフォーム(お問い合わせフォーム)本体の名称に関してです。ありがちなURLのサンプルをご覧ください。
https://www.example.com/mailform/contact.html
ファイル名が"contact.html"となっており、botにとっては「メールフォームである可能性が高いファイル」という風に見えてしまいます。
こちらも、(bot的に)わかりやすい名称は使わず、"otoiawase.html"など、ひねりを利かせたファイル名を付けるようにします。上記サンプルを変更すると、以下のような雰囲気になります。
https://www.example.com/mailform/otoiawase.html
文字の並びとしてはいまひとつダサい感じもありますが、URLを指定してダイレクトにメールフォームを開くことはなく、機能的に問題はありません。
続いては、メールフォームから送信されたデータがスパムであるか否かの判定に役立つヒントをご紹介します。
【スパム対策その2】人間の証明!?
フォームの入力項目をひとつ追加し、スパム対策として使う
メールフォーム(お問い合わせフォーム)で送信されるデータは、すべて管理者宛に送信されます。このため、メールアドレスで仕分けることができません。
また、メール本文の内容により仕分けようとしても、書かれていることは千差万別であるため基準となる識別子を決定することができません。これがメールフォームを利用したスパムの厄介なところ。
ならば、明確な識別子を作ってしまえば良いのです。具体的にはフォームの入力項目をひとつ追加し、そのデータを識別子として使えるデータにします。
識別子に適しているのは「文章を読んで問いに答える」という、人間にしかできない思考の結果である文字列。例えばクイズとその解答は最適です。難易度は関係ないので、誰でも解ける簡単な問題で構いません。
サンプルとしては「日本で一番高い山は? 漢字3文字でお答えください」といった感じです。これならばオンリーワンな解答となり、仕分けの識別子として申し分ありません。
合わせて「クイズの解答はbot判定に使用します」のような注意書きをしておけば、メールフォーム(お問い合わせフォーム)の利用を考えたユーザーに不信感を与えることもありません。以下にWebサイトへの実装例(スクリーンショット)を掲載しておきます。
文章を解析して的確に答えられるbotは(今のところ)存在せず、正解の文字列を入力しているなら、それは生身の人間による操作であると判断できます。
逆に不正解または空欄である場合、botの仕業である可能性があります。ただ、人間であっても間違いや入力ミスなどが考えられますので、断定はできません。
例えばメールクライアントで仕分ける場合、フィルタの条件としてメール本文にクイズの正解が含まれているなら正規の問い合わせ、それ以外はスパムの可能性があるメール、と設定します。
間違いや入力ミスがある関係上、完全にスパムだけを分離することはできませんが、少なくともbot由来のメッセージのほとんどは排除できます。
最後に:手間とコストを最小限におさえて、メールフォーム(お問い合わせフォーム)のスパム対策をしよう
ここでは2つのヒントを紹介しましたが、いずれも実際に筆者の零細なWebサイトで実践しており、施策後はスパム系のメールは皆無の状態となりました。このため、一定の効果は期待していただいてもよろしいかと。
技術的にはさほど難しくはなく、手間もコストも最小限。そんな雰囲気なので、気軽に試すことができます。
本記事がメールフォーム(お問い合わせフォーム)のスパム対策に悩む皆様の参考になりますれば幸いです。
ドメインが実質0円(年間最大3,882円お得)になるサーバーセット割特典、
V2プランが初期費用無料・15%OFF(月額390円→331円)ブラックフライデーセールを展開中です。
最新のキャンペーンはこちらから
※ユーザーノートの記事は、弊社サービスをご利用のお客様に執筆いただいております。
コロナ禍の緊急事態宣言でも生活がほとんど変わらなかった、おウチ大好きテクニカル系ライター。好物はPC、スマホ、ガジェット、そしてコタツ。