最近、お問い合わせフォームからメールが届くようになりました。ちょっと喜んだのですが、中身は英文でした。そう、いわゆるスパムメールだったのです。お問い合わせフォームは有名なContact Form 7を利用しておりますが、それに対応したスパムというものがあるんですね。
別にメールサーバの容量がヤバいわけでもないし(レンタルサーバ屋さんからメールアカウント(ドメイン)とサーバ領域はいただいてますが、潤沢に余っております)、放置してもいいんですが、それだと能がない。何か対策はないものかとネットを徘徊しておりますと、さすがですねえ。よさそうなものがありました。
もともとは、Contact Form 7のカスタマイズ機能なんですが、なんと、日本語が含まれないメールを排除できるコードを発見しました。またコピペかよ、と言われそうですが、ししょーはWebエンジニアではないのでありがたく使わせていただくことにしました。
方法としては、function.phpにフィルタ機能を追加して、日本語(便宜上ひらがな)が含まれないメールは、エラーとして拒否するというものです。いくつかのサイトを参考に設定してみた結果、うまくいったようなので、これで様子を見たいと思います。
当サイトは、内容から言っても国内向けですので、日本語以外のメールが来ることは考えにくいです。海外からのスパムメールなら、日本語環境(IME)を入れない限り日本語を書くことはできないし、かなり効果が高いものと思われます。まさか、このために日本語OSとIMEを用意するような手間のかかることはしないでしょう。
もう1つおまけなんですが、これもスパム対策として、acceptance(承諾確認)のチェックボックスを追加しました。メニューから「承諾確認」のボタンを押せば、フォームにタグが追加されます。これで、チェックを入れないとメールが飛ばないはず。あれ?デフォルトでoptional(任意)が入ってやがる!optionalを付けると任意選択となり、つまりチェックボックスはただの飾りになります。余計なものを削除して、今度はチェックを入れないとエラーになりました。成功です!
他にも対策としてCAPTCHA(キャプチャーと読みます)も使えるようなのですが、導入作業が面倒だし、何よりあのグネグネした文字列を読むことの困難や面倒さを考えて、使わないことにしました。20回に1回は文字が違いますと怒られるのも止めた理由です。
ああ、最近PHPの勉強してないな。と気付いたのですが、他にやることが多いので(資格取得とか)、なかなか手が回らないです。がんばって、宝くじを当てて悠々自適な生活を送って(ry
(9/8初版公開、9/11一部追記しました)