最近、私はインターネットで偶然見つけたログイン スクリプトに独自のセキュリティを実装しようとしています。ユーザーごとにソルトを生成する独自のスクリプトを作成する方法を習得するのに苦労した後、password_hash
を見つけました。
私が理解したところによると (このページを読んだことに基づいて)、password_hash
を使用すると、その行にソルトがすでに生成されています。これは本物です?
私のもう一つの質問は、塩を 2 種類用意した方が賢明ではないでしょうか。 1 つはファイルに直接、もう 1 つはデータベースにありますか?これにより、誰かがデータベース内のソルトを破損した場合でも、ソルトをファイルに直接保存できますか?ここで、塩を保管するのは決して賢明な考えではないと読みましたが、人々がそれを何を意味するのかいつも混乱します。
はい、正しく理解できましたね。password_hash() 関数はそれ自体でソルトを生成し、生成されたハッシュ値にソルトを含めます。ソルトが機能することがわかっている場合でも、ソルトをデータベースに保存することは絶対に正しいです。
リーリーあなたが言及した 2 番目のソルト (ファイルに保存されているもの) は、実際にはペッパーまたはサーバー側のキーです。ハッシュする前に(塩と同じように)コショウを加えると、コショウを加えることになります。ただし、より良い方法があります。最初にハッシュを計算し、次にサーバー側のキーを使用してハッシュを暗号化する (両方の方法) ことができます。これにより、必要に応じてキーを変更できます。
ソルトとは対照的に、このキーは秘密にしておく必要があります。よく混同して塩を隠そうとする人がいますが、塩に役割を果たしてもらい、秘密をキーで追加する方が良いでしょう。
パスワードを保存するには、
password_hash
を使用することをお勧めします。データベースとファイルに分けないでください。次の入力があるとします:
リーリーまず、次の手順を実行してパスワードをハッシュします:
リーリー次に、出力を表示します:
リーリーご覧のとおり、ハッシュ化されています。 (以下の手順を実行したと仮定します)。
ここで、このハッシュされたパスワードをデータベースに保存します。 パスワード列がハッシュ値を収容できる十分な大きさであることを確認してください (少なくとも 60 文字以上) 。ユーザーがログインを要求した場合、次のようにデータベース内のハッシュを使用して、入力されたパスワードを確認できます。 リーリー
公式リファレンス