上野 で、もう一つはパスワードの保存方法だね。荒井君はパスワードの文字列をそのままデータベースに登録するように組んでいるね。
荒井 ……さすがに問題ありますかね?
上野 これが今回の最大のポイントだね。パスワードはハッシュ化したい。
荒井 ハッシュ化、知らない単語ですね。
上野 暗号化と似てはいるんだけど、ハッシュ化では「ハッシュ関数」を使って、パスワードを別の文字列に変換するんだ。これを「ハッシュ値」というんだけど、ハッシュ値からパスワードは基本導き出せないようになってる。暗号化だと暗号からパスワードに戻せるんだよね。
荒井 暗号化は可逆変換で、ハッシュ化は不可逆変換なんですね。でもそれってパスワードを忘れたときに不便じゃないですか? ユーザーから「パスワードを忘れた」って問い合わせられても答えられませんよね。
上野 確かに、現実的な問題で、クライアントからのパスワード関係の問い合わせに答えやすいように平文で保存するケースは見たことあるけど、セキュリティの観点では推奨できない。一般的には、パスワードを忘れた人にパスワードの再設定をお願いすることになる。多少不便でもね。
逆に他のWebサイトでパスワードを忘れて問い合わせたときに、パスワードがそのまま送られてきたら、おそらく平文か暗号化した状態で保存していると推測できるわけだ。それがデータベース丸ごと漏えいしたら……どうなるかは想像つくよね。
荒井 ニュースになっちゃう……。これはなかなか難しいですね。
上野 まぁね。これは勉強するしかないね。どういう問題が発生するかって経験を積む中で分かってくる部分もあるし、そもそもプログラミングの勉強っていうよりセキュリティの勉強が必要になるしね。細かいところは資料のURLを送るから、それを見ながら修正してみて。
荒井 分かりました。やってみます。
──しばらくして……
上野 じゃあ修正ポイントをチェックしていこうか。
荒井 ハイ! パスワードはハッシュ化して、IDの衝突をチェックして──勉強になりました。
荒井 じゃあ、次回は認可について勉強していこうか。今日はお疲れさま。
Copyright © ITmedia, Inc. All Rights Reserved.
Special
PR