メールで会員登録するというのはよくあります。
ですがこのメールでの登録時の仕組みをちゃんと考えておかないと脆弱性につながります。
これはメールの仕組みを理解していると、どんな手法が使われるのか?
というのがなんとなくわかるように書いてみたいと思います。
メールを送る際の決まりというのが当然あってexample.com宛てに出すとこんな感じのデータが送信されます。
To: hogehoge@example.com
Subject: =?ISO-2022-JP?(以下略)
From: example@example.net
Content-Type: text/plain; charset=ISO2022-JP
先日送ったクサヤはどうでしたか?
よかったら感想きかせてくださいね。
こういうデータがサーバー間でやり取りされてメールが飛んでいきます。
見てもらうとわかるかと思いますが、それぞれのデータは「改行」で区切られてそれらが1つの要素として処理されます。
実際にメールアドレスを登録する所は「input type="text"」で書かれているので改行などは混入しないと思いがちですが、何も実際に改行を入れなくてもいいわけです。
たとえば改行コードとみなされるものや、終端とみられるものを入れることで
input type="text"で「Bcc」や「Cc」をいれる事が可能となることがあります。
メールアドレスのチェックは正規表現で行っていることが多いと思いますが、メールアドレスをチェックする際にはメールの正規性以外にも以下のことをチェックすることでセキュリティーホールを小さくしていきましょう。
・メールアドレスとしての正規性のチェック
・メールの長さチェック
RFCでは@の前は最長64文字@の後ろは最長255文字
全体としては256文字までという決まりがあります。
ある程度の長さでチェックすることで、複数アドレスの混入を防げます。
・改行コードのチェック
メールの仕組みからして改行のチェックは必須です。
通常は登録時のアドレスは1つだと思うので改行が含まれていたら
ちゃんとエラーとして処理するようにしましょう。
またこれは登録だけでなく、パスワードの再発行などをメールで行う際のメール入力など、メールを入力する部分全てに適用する必要があります。
以上のことに気をつけると少しだけですが、登録時の脆弱性を減らすことができるので試してみてください。
セキュリティー