0

ログインロジックのセキュリティ監査を行っており、どのパスワードチェックがより安全で、より優れたアルゴリズムであるかを把握しようとしています。以下は、疑似PHPコードの2つのメソッドです。

方法I:

$bcrypt = new Bcrypt();
$password_hash = $bcrypt->hash($_POST['password']);
$result = mysqli_query_check_login($username, $password_hash);

if(mysqli_numb_rows($result) > 0) {
   //is valid
}

方法II:

$bcrypt = new Bcrypt();
$result = mysqli_query_check_login($username);

//Note $result->password is a bcrypt hash
if($bcrypt->verify($_POST['password'], $result->password)) {
   //is valid
}

違いはmethod I、bcrypt hashを実行してから、mysqlクエリでユーザー名とハッシュ化されたパスワードを送信することです。Method IImysqlからユーザー名のみを介してハッシュされたパスワードを取得し、PHPで2つの値を比較します。

セキュリティ上の違いはありますか?

ありがとう。

4

2 に答える 2

4

これらは事実上同じものです。どちらの方法を使用しても、セキュリティに影響はありません。

于 2012-12-30T02:35:37.663 に答える
1
  1. Method IIおそらく、ユーザーの情報を取得して、「ログイン試行の失敗」カウンターなどを更新する方が簡単になるでしょう。私が見たほとんどの実装は、パスワードが一致しない場合にユーザーを選択しないことにMethod I依存しています。WHERE user=$login AND password=$password
于 2012-12-30T02:46:49.000 に答える