ユーザーログインを検証するとき、最初にユーザー名を検索し、見つかった場合は、ハッシュされたパスワードとソルトを取得してユーザー入力と比較しても安全ですか?
または、ユーザーが入力したユーザー名のソルトを単独で取得し、入力したパスワードでハッシュして、データベース内の最終ハッシュと比較する必要がありますか?
本質的に、ユーザーが入力したパスワードが有効かどうかを知る前に、入力されたユーザー名のパスワードをデータベースから保存しても安全ですか?
PHP Password Hashing API https://github.com/ircmaxell/password_compatの例を見ると、答えは次のとおりです。いいえ、データベースからユーザーを読み取り、保存されているパスワード ハッシュと、ログインフォーム。
このライブラリを使用してみてください - PHP 5.5 は関数をネイティブにサポートします。PHP 5.3.7 以降を使用している場合は、車輪を再発明せずにこれらの関数を使用することをお勧めします。独自のことを行うことは、攻撃される可能性が高くなります。
ログイン名とパスワードの両方を同時に確認できます。生のパスワードを取得します。それをソルトし、ソルトされたパスワードとユーザー名の組み合わせが存在するかどうかを確認します。もちろん、db のパスワードは以前にソルト化およびハッシュ化されているはずです。
if($loginname AND $loginpass){
$loginpass=sha1($salt1.$loginpass.$salt2,$raw_output=false );
$userinfo_query="SELECT * FROM users WHERE user_name='$loginname' AND user_pass='$loginpass' LIMIT 1";
}