【发布时间】:2016-11-13 00:07:22
【问题描述】:
这是我第一次尝试使用所有存储在数据库 (MySQL) 中的加盐密码来实现会员网站。除了“会员登录”页面中的错误之外,一切正常。
错误:
会员登录页面接受会员网站的任何条目,并且由于某种原因通过了我对$result === false的检查
这是检查成员是否存在的代码,请告诉我问题所在:
$servername = 'localhost';
$username = 'root';
$pwd = '';
$dbname = 'lp001';
$connect = new mysqli($servername,$username,$pwd,$dbname);
if ($connect->connect_error){
die('connection failed, reason: '.$connect->connect_error);
}
$name = mysqli_real_escape_string($connect, $_POST['name']);
$password = mysqli_real_escape_string($connect, $_POST['password']);
$saltQuery = "SELECT salt FROM users WHERE name = '$name';";
$result = mysqli_query($connect, $saltQuery);
if ($result === false){
die(mysqli_error());
}
$row = mysqli_fetch_assoc($result);
$salt = $row['salt'];
$saltedPW = $password.$salt;
$hashedPW = hash('sha256', $saltedPW);
$sqlQuery = "SELECT * FROM users WHERE name = '$name' AND password = '$hashedPW'";
if (mysqli_query($connect, $sqlQuery)){
echo '<h1>Welcome to the member site '.$name.'</h1>';
}else{
echo 'error adding the query: '.$sql_q.'<br> Reason: '.mysqli_error($connect);
}
【问题讨论】:
-
看到这对你来说几乎是统包,登录部分,
password_verify()在这里:stackoverflow.com/a/33665819。它包括会话、错误报告和 try/catch -
SHA-* 算法不能安全地存储密码,而是使用函数password_hash() 来生成安全的 BCrypt 哈希。单独存放盐会变得不必要,看看这个answer。
-
@martinstoeckli - 谢谢你,如果你能把它写成代码,我会把它作为答案,在未来帮助我和其他人,再次感谢。
标签: php mysql passwords membership salt