質問: ランダムパスワードとnullパスワード? 一部のユーザーをレガシーアプリのデータベースから新しいデータベースに移行し、既存のデータベースからユーザーとその全データを取得するスクリプトを作成しました。 ユーザーのパスワードがハッシュ化されているため、これらを引き出すことはできませんが、これで問題ありませんが、リセットを実行する前に、最も安全な方法は何だろうと思いました。 * パスワードフィールドをNULLにして、リセット時にフィールドに入力します * ユーザーのランダムなパスワードを生成し、パスワードフィールドをNOT NULLのままにしてリセット時に入力します ランダムなパスワードを生成することは余分な、不必要な仕事のように見えますが、私は通常の状況下ではすべてのユーザーがパスワードを持っているのでNULLパスワードを持つことはセキュリティホールかもしれないと思います。 誰かが何か手引きを提供できますか?
回答: ここでの問題は、ログインロジックがパスワードハッシュの代わりに未定義の値をどのように解釈するかです。私はあなたがSQLの意味でのNULLを未定義の値として意味すると思います。 システムがユーザーが入力したパスワードのハッシュと保存されているハッシュを比較すると、未定義の値(または空の文字列)でも一致することはありません。同様に、格納されたハッシュは、有効なパスワードハッシュとして決して一致しない他の文字列に設定することができます。 Linuxシステムでは、パスワードハッシュの代わりに `*` を付けて`/etc/shadow` にシステムアカウントを表示し、 `usermod -Lを使ってユーザーをロックすることができます。` はハッシュを`!`に設定します。どちらも有効なパスワードハッシュではないため、パスワードでログインしても成功しません。 ただし、ログインシステムが未定義の(または空の)値を空のパスワードと一致すると解釈する危険性がある場合は、それらを使用しないことを真剣に望んでいます。未定義の値もエラーにつながる可能性がありますが、少なくとも見栄えはよくないかもしれません。 システムが未定義のパスワードで動作することが確認されテストされていること、またはアカウントに使用不可またはロック済みのマークを付ける方法が他にあるかどうかを確認する必要があります。どこにも保存されていない、ランダムに生成された長いパスワードに一致する有効なハッシュを生成することは、システムがどのような場合でもそれを処理できる可能性が高いという点で安全です。