星野君 「(メールアドレスが流出しただけでもニュースになるくらいだからこれは問題だろうな……)」
1つ脆弱性を見つけることができた時点で、赤坂さんが話し掛けてきた。
赤坂さん 「何か見つけられた?」
星野君 「あ、はい。1つだけですけども……」
赤坂さん 「そかそか。じゃあ、まだ終了までちょっと時間あるけど、いったん見つけた脆弱性確認しよっか」
星野君 「はい」
星野君には、一瞬赤坂さんの顔が曇ったように見えたが、ひとまず見つけた脆弱性の現象やどういった悪用方法が考えられるかなどを説明した。
赤坂さん 「お。ちゃんとそれ見つけたんだね。じゃあ、どういうふうに直したらいい?」
星野君 「えっと……。そこまで考えてなかったです……」
赤坂さん 「えー。それじゃダメだよー。こういう場合は……」
このような会員登録などでメールアドレスを使用する場合、登録されているメールアドレスを判別されないようにするためには「メールアドレスの重複を許容する」というのが最も確実だ。通常、特別な理由がない限り重複を許容することが推奨される。
しかし、メールアドレスをIDとして利用するような場合は、メールアドレスの重複はできなくなってしまう。そこで、Webブラウザ上では重複を通知せずユーザーに重複登録を知らせる必要が出てくる。
正当なメールアドレスの所有者だけに対してメールアドレスの重複を知らせるには、メールを利用するのが効果的である。実装の方法としては以下の2つの方法が考えられる。
会員登録前にメールで重複確認結果を通知する場合、ユーザーにメールアドレスのみを入力してもらい、重複チェックを行う。メールアドレスが重複して登録されている場合、重複していることをユーザーにメールで通知する。重複していない場合は、メールアドレスにひも付けられた会員登録用URLを生成し、そのURLから会員登録を行わせる【注2】。
【注2】
URLを生成する際には、ハッシュ値を使うなど攻撃者が容易に推測できないようなパラメータ値を含む必要がある
会員登録完了時にメールで重複確認結果を通知する場合、メールアドレスが重複していてもエラーメッセージを表示せず、通常の遷移をさせ登録を完了させる。その後、登録完了通知でメールアドレスが重複していることを通知し、新しい会員登録の情報を破棄する形になる。
この場合、Webアプリケーション自体はセキュアになるのだが、せっかくユーザーが入力した登録情報が無駄になってしまうので、ユーザーから見た場合あまり好ましい形とはいえないだろう。
星野君 「なるほど……。Webブラウザ上だけで完結させないで、メールを使って重複のチェックを行うんですね〜。思いつかなかったです……」
赤坂さん 「まあ、メールアドレスの重複チェックってちゃんとやってないところが多いから、ユーザーの視点から見たらよく分かんないかもね」
星野君 「普段、自分が使うときには気にしたことなかったですね」
Copyright © ITmedia, Inc. All Rights Reserved.