PHPのpassword_hash関数を使用してパスワードをハッシュして検証する方法
P粉011684326
2023-08-17 20:41:00
<p>最近、インターネットで見つけたログイン スクリプトに独自のセキュリティを実装しようとしています。ユーザーごとにソルトを生成する方法に関するスクリプトを学ぼうとしていたときに、<code>password_hash</code> を見つけました。 </p>
<p>(このページを読んだことに基づいて)私が理解したところによると、<code>password_hash</code> を使用すると、その行にソルトがすでに生成されています。これは本当ですか? </p>
<p>別の質問がありますが、塩を 2 つ使用するのは賢明でしょうか? 1 つはファイルに直接保存され、もう 1 つはデータベースに保存されますか?こうすることで、誰かがデータベース内のソルトを破ったとしても、ファイルにはソルトが残ったままになります。塩を保管するのは決して賢明な考えではないとここで読んだことがありますが、人々がこれを言うといつも困惑します。 </p>
はい、正しく理解できました。関数password_hash()は自動的にソルトを生成し、生成されたハッシュ値にソルトを含めます。ソルトをデータベースに保存するのは完全に正しいです。ソルトがわかっている場合でも機能します。
リーリーあなたが言及した 2 番目のソルト (ファイルに保存されているソルト) は、実際にはペッパーまたはサーバー側のキーです。ハッシュ(塩など)の前にそれを追加すると、唐辛子を追加したことになります。ただし、より良い方法があります。最初にハッシュ値を計算し、次にサーバー側キーを使用してハッシュ値を暗号化する (双方向暗号化) ことができます。このようにして、必要に応じてキーを変更できます。
ソルトとは異なり、このキーは秘密にしておく必要があります。混乱してソルトを隠そうとする人がよくいますが、ソルトに任せて、キーを使って秘密を追加する方が良いでしょう。
パスワードを保存するには、
password_hash
を使用することをお勧めします。これらをデータベースとファイルに別々に保存しないでください。次の入力があるとします:
リーリーまず次の方法でパスワードをハッシュします:
リーリー次に出力を確認します:
リーリーご覧のとおり、ハッシュ化されています。 (これらの手順は完了しているものとします)。
次に、このハッシュされたパスワードをデータベースに保存します。 パスワード列がハッシュ値を収容できる十分な大きさであることを確認してください (少なくとも 60 文字以上) 。ユーザーがログインを要求すると、データベース内のハッシュが次の方法で入力されたパスワードと一致するかどうかを確認できます。 リーリー
公式参考ドキュメント