Security(セキュリティ)

お問合せフォームの脆弱性対策

お問合せフォームからのスパムメール対策

お客さんから「お問合せフォームからスパムメールが大量に届くんですが。。。」という報告が入りました。

メールの内容はこれです。



お名前:注冊送188菜金980856点com加威信v202368
メールアドレス:523564608@qq.com

この内容だけ見ると、明らかに中国から送られてきたメールのようです。

このような内容のメールが大量に届くということは、

スパムメールの踏み台にされてしまった可能性もあるので、

何か対策が必要です。

 

で、まずはアクセスログを調べてみると、

「223.130.xx.xx」というIPアドレスから、

お問合せフォームへのアクセス履歴が大量に残っていました。

取りあえず、

コマンドプロンプトを立ち上げて、

# curl ipinfo.io/223.130.xx.xx/country

と打ち込んでIPアドレスが割り当てられている国を調べてみると、

PH(フィリピン)」と返ってきました。

 

発信元はフィリピンだけど、送っているのは中国人?

フィリピン国内に置いてあるサーバを利用・経由している?

ということですかね?
※まさか、中国語が堪能なフィリピン人が、わざわざ中国人の振りして送っていることもないと思いますし。。。

 

取り合えず、

.htaccessに以下を記述して、上記IPアドレスからのアクセスをブロックです。

order allow,deny
allow from all
deny from 223.130.xx.xx

 

ただ、

これだけでは根本的な解決にはなりません。

組んだのもかなり前のものですし、

ここは、お客さんの了承を得て組み直してやることにしました。
※恥ずかしながら、重要な脆弱性対応が諸々漏れているフォームなので。。。

 

で、重要なのは、

フォームが辿ってきたルートが正しいかどうか」のチェックを入れてやることです。

ここは、

トークンを発行してユーザーが確認画面から正しく移動してきたかのチェックを行います(CSRF対策)。

 

本当は、リファラーチェックも入れてやればより強力にはなるのですが、

諸々の問題で、

今回はそちらは見送ることになりました。

 

あとは、画像認証を入れてやるのも対策にはなるかと思います。
※私は、ここまでするとユーザーの離脱が怖いので、極力入れたくはないですが。

 

それと、

悩むのは「お名前」の入力欄の制限です。

「お名前」の項目には、

「注冊送188菜金980856点com加威信v202368」というように、

本来は日本人の名前には含まれない半角英数字が入っていました。

 

なので、

全角文字以外が含まれていればエラーで弾いてやる」という仕様にした方がいいのですが、

個人的にはフォームの入力制限に関しては、

ユーザーの離脱を避けるためにもあまり厳しくはしたくないです。

 

ここは悩むところですが、

海外からのお問合せはないという前提(実際にないですし)で、

半角英数字が含まれていれば弾いてやることにします。

 

それと、「フリガナ」についても対策を入れるか悩むところです。

・カタカナ以外の入力はエラーメッセージを出す?
・半角カタカナは入力Ok?
などいろいろ考えられますが、

今回は、「カタカナ以外はエラーで弾く(半角カタカナはOK)」という仕様にしました。

 

あとは、「メールアドレス」や「電話番号」、「郵便番号」など、

ある程度形式が決まっている項目についても、

入力された値の形式が正しいか?
 ※例えば、郵便番号であれば7桁、もしくは、ハイフン付きで8桁になっているか?
半角で入力されているか?

などのチェックも入れておけば、より強力になりますね。

 

その他には
・テキストボックスの項目には、全て「maxlength」を設定しておいて、設定した文字数を超えたテキスト量が送信されてきていないか?
・チェックボックスやラジオボタン、プルダウン(セレクトボックス)のような選択項目については、本来、選択できないよう値が送信されてきていないか?

などのチェックも入れると、さらに強力になります。

 

他にもいろいろやれることはありますが、

これで一旦様子を見ることにしました。

 

「ipinfo.io」でIPアドレスの割り当て国を調査する方法

IPアドレスの割り当て国を調べる際には、

コマンドプロンプトやTera Termなどを立ち上げて、

コマンドラインから

# curl ipinfo.io/IPアドレス/country

と打ってみて下さい。

IPアドレスに割り当てられた国を返してくれるので便利です。

 

さらに詳細な情報が必要な場合には、

countryを付けずに、

# curl ipinfo.io/IPアドレス

と打ってみて下さい。

 

また、ブラウザからでも確認は可能です。

https://ipinfo.io/IPアドレス/country

というURLを、ブラウザのアドレスバーに打ち込んでみて下さい。

IPアドレスに割り当てられた国名を返してくれます。

さらに、

https://ipinfo.io/IPアドレス/

と叩けば、

このように、もっと詳しい情報を返してくれます。
ipinfo.ioの詳細画面

 

何か良く分からないIPアドレスからのアクセス履歴が残っていた場合には、

簡単に情報を調べられるのでとても便利です。

 

この記事を書いている人
株式会社ディープ
名前足立拓也

メールアドレスadachi@deep-deep.jp

関連記事

最近の記事

  1. ドメインについて
  2. WP:WordPress(ワードプレス)
  3. URL設計(URLデザイン)
  4. URL「ディレクトリ名」と文字アンダースコア(_)とハイフン(-)
  5. SEO対策(外部ファイルの読み込み)
  6. URL リダイレクト
  7. インデックスされない
  8. 内部対策は必要?
  9. CMS(シーエムエス)
  10. SEO業者は必要?

Twitter

アーカイブ

PAGE TOP