質問: phpとMySQLを学んでいる者です。 フォームから受け取ったIDとパスワードをもとに、ユーザを認証するページを制作しています。制作を進めながらいろいろ調べていると、password_verifyという関数をよく目にします。パスワードがハッシュに適合するか調べるための関数なのだということはわかりました。ハッシュを作るにも別の関数が必要だということもわかりました。 この関数がなにをするのかはわかりましたが、なぜこれが必要なのかがいまいちピンときません。IDをもとにテーブルからパスワードをSELECTして、それと$_POST(フォームからはPOSTメソッドで送信してます)を照合するのとなにが違うのでしょう?わざわざハッシュなんちゃらの処理を挟むのは余計じゃないか?と思ってしまいます
回答: 機能だけ考えるとその通りです。 生のパスワードをそのままDBに格納せずにハッシュ化された値を格納、参照するのはセキュリティ上の理由です。 代表的な例だと、 生のパスワードがそのままDBに格納されていると、DBが流出した場合に即時に不正アクセスされてしまいます。 適切にハッシュ化されていれば、DBが流出してもハッシュを突破される前にある程度の猶予が発生し、パスワードをオールリセットして不正アクセスを防ぐことが出来る可能性が高くなります。