0

我正在对我的登录逻辑进行安全审计,并试图找出哪个密码检查更安全,以及更好的算法。下面是伪 PHP 代码中的两种方法:

方法一:

$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
}

方法二:

$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 II仅通过用户名从 mysql 获取哈希密码,然后在 PHP 中比较这两个值。

安全性有区别吗?

谢谢。

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 回答