PHP登录页面安全审核

时间:2012-12-30 02:30:20

标签: php security authentication

我正在对我的登录逻辑进行安全审核,并试图找出哪种密码检查更安全,以及更好的算法。以下是伪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中比较这两个值。

有任何安全性差异吗?

感谢。

2 个答案:

答案 0 :(得分:4)

这些实际上是一回事。使用任何一种方法都不应该有安全隐患。

答案 1 :(得分:1)

  1. Method II可能会更简单地获取用户的信息并更新“失败的登录尝试”计数器。我见过Method I的大多数实现只是依赖于WHERE user=$login AND password=$password如果密码不匹配则不选择用户。