2017/08/09
メール内に特定の文字列が含まれている場合にスパムと判定して強制終了させメール送信をストップします。
このページの対策用のPHPソースはあくまでも当サイトで配布しているメールフォームプログラム専用のソースです。
他社製などのプログラムはこのままでは問題が出る可能性が高いため、使用されないほうが良いでしょう。
スパムメールのほとんどが毎回特定の同じ文字列を含んでいることがほとんどのため、その文字列を禁止キーワードに設定することでスパムメールを防止します。
まずは実際に届いているスパムメールの内容をご確認いただき、
そこに記載されている内容から設定するキーワードを決定して下さい。
もちろん特定のメールアドレス(またはドメイン)から届いているのであればメールアドレスを設定してもOKです。
以下の対策用のコードは
そのキーワードが含まれているかどうかで判断されます。(部分一致)
そのためキーワードの設定にはご注意下さい。
たとえば「殺」というキーワードを設定した場合、 「殺伐」であったり、「相殺」などもマッチしてしまうため、 強制終了されてしまいます。 またスパムの多くがメール内容に何らかのURLを含みますが、「http」を禁止キーワードに設定した場合、当然URLを入力することは現実的にできなくなります。(正規のユーザーがURLを入力することは想定していない場合には有りです)
そのためキーワードの設定は慎重に検討した上で、 出来る限り正規のユーザーが入力することがないであろう文字列を設定下さい。
配列型ではないすべてのPOSTデータを対象にチェックを行います。
※POSTデータとはフォームからPHP側に渡される内容です。
要するに基本的には入力フォームにある全ての項目に対してチェックを実施します。
※配列型とはname属性の後ろに[]が付いているものです。チェックボックスや項目連結時に使用するものです。
要するにそれらはチェックされません。
(フォーム内での配列型の項目は少数であるか、まったく無い場合がほとんどなので問題ないと考えています)
フォームで入力された内容に禁止キーワードが含まれている場合は
確認画面の段階で「Error」が表示されます。
この「Error」の文字は下記のソースコードで変更も可能です。
※ソースコード内の「exit('Error');」の箇所です。
ただし、スパム対策という性質上、「禁止ワードが含まれています」というようなメッセージは控えたほうがいいでしょう。スパム側に弾かれた理由を知らせてしまうことになります。
以下のソースコードをmail.phpの上部にコピペして下さい。 コピペ箇所は特にどこでも構いませんが、 PHPのコメントアウトの部分以外にコピペ頂く必要があります。 たとえば以下の記述の上あたりにでもコピペ下さい。
//--------------------------- 必須設定 必ず設定してください -----------------------
その上で「禁止するキーワードを設定下さい」の箇所に ダミーで書いている内容を参考に、入力内容に含まれていたら送信を禁止するキーワードを設定下さい。
これだけです。
設置後は必ず送信テストを実施して
設定したキーワードを入力した場合に強制終了すること、
及び通常の送信では問題なく送信でき、またちゃんと届くことを必ずご確認下さい。
★スパム対策をより強力にしたい場合用
残念ながら中国からのスパムは非常に多く確認されています。
そのためユーザーのブラウザの言語設定がzh(中国)であった場合に強制終了させます。
上記の対策でも基本的には非常に有効ではありますが、いたちごっこになってしまう可能性もありますので合わせ技でより強力にスパムを排除しようという対策です。
または上記を試したけどスパムが止まないという場合にお試しください。
実際に効果を確認済です。ただし下記の副作用もありますので、導入の判断は慎重に行なって下さい。
まず中国語での問い合わせも受付けている場合は当然使用不可です。
また単にブラウザの言語設定が中国語になっていれば適用されるため、たとえば日本語が話せる中国人も弾かれる可能性もありますし、まぁ少ないとは思いますが、たとえば日本人でブラウザの言語設定を中国語にしている場合も当然弾かれます。
以下のコードをコピペすることで言語設定が中国の場合に強制終了させ、送信出来ないようにします。
mail.phpの上のほうにコピペ下さい。exit()で強制終了させるので上のほうであればどこでもOKです。
ユーザーの言語設定を$_SERVER['HTTP_ACCEPT_LANGUAGE']で取得し、substr関数で先頭の2文字を切り出して「zh」が含まれていたら言語設定が中国語であると判断しています。
言語設定が中国語の場合、主に以下のような値を取得します。
zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
こちらの先頭の2文字はzhなので、この場合中国語と判断して強制終了することになります。
ちなみに日本語設定の場合は主に以下のようなものとなります。
ja,en-US;q=0.7,en;q=0.3
実装後は必ず送信テストを複数回行うなどで十分に動作をご確認下さい。