我正在对我的登录逻辑进行安全审核,并试图找出哪种密码检查更安全,以及更好的算法。以下是伪PHP代码中的两种方法:
方法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 II
仅通过用户名从mysql获取哈希密码,然后在PHP中比较这两个值。
有任何安全性差异吗?
感谢。
答案 0 :(得分:4)
这些实际上是一回事。使用任何一种方法都不应该有安全隐患。
答案 1 :(得分:1)
Method II
可能会更简单地获取用户的信息并更新“失败的登录尝试”计数器。我见过Method I
的大多数实现只是依赖于WHERE user=$login AND password=$password
如果密码不匹配则不选择用户。