password_verify每次都返回false

时间:2017-12-25 20:18:00

标签: php password-encryption

标题。它通过用户名检查,我测试过。我使用了一些修剪/剥离标签作为避免SQL注入的一部分。但就目前而言,唯一感兴趣的部分是password_hash和password_verify每次检查失败。

数据库密码字段是BLOB,但我也尝试了VARCHAR 255和CHAR 255。

相关登录验证:

const app = require('./app');
const http = require('http').Server(app);
const io = require('socket.io')(http);

...

http.listen(port, function(){
    console.log('listening on *: ',port);
});

相关注册码:

if(isset($_POST["login"])){
$username = trim($_POST['username']);
$username = strip_tags($username);
$username = htmlspecialchars($username);

$loginpassword = trim($_POST['password']);
$loginpassword = strip_tags($loginpassword);
$loginpassword = htmlspecialchars($loginpassword);


$loginQuery= "SELECT * FROM members where username='$username'";
$result = mysqli_query($conn, $loginQuery);
$row = mysqli_fetch_assoc($result);
$hash = $row['password'];
if(password_verify($loginpassword, $hash)){
    $_SESSION['username'] = $username;
    header("Location: index.php");
}
else{
    $loginErrorExists= TRUE;
}
}

2 个答案:

答案 0 :(得分:2)

$ password = htmlspecialchars($ username);
是的,你有$ username作为密码!

答案 1 :(得分:1)

我按照Funk Forty Niner的建议完全移除trim(),strip_tags()和htmlspecialchars()来解决它。