无法使用password_hash密码保存在db中保存的密码

时间:2017-04-27 10:22:07

标签: php mysql

我在使用password_hash验证存储在mySQL数据库中的密码时遇到问题。 insert查询从表单

中获取值
query = "INSERT INTO users (email, password, diary) VALUES ('"
        .mysqli_real_escape_string($link, $_POST['email'])."', '"
        .password_hash(mysqli_real_escape_string($link, $_POST['password']), PASSWORD_DEFAULT)."', '"
        .mysqli_real_escape_string($link, $_POST['password'])."')";

当我尝试使用

进行验证时
if(password_verify(mysqli_real_escape_string($link, $_POST['password'], $row['password']))) {

它总是作为无效密码出现,即使我知道我正确输入它。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:-2)

if-statement中的括号似乎犯了一些错误。

你拥有的是:

if (password_verify(
        mysqli_real_escape_string(
            $link, 
            $_POST['password'], 
            $row['password']
         )
     )
) {

您所遇到的问题不仅是$_POST['password']而且$row['password'],因为您的括号放置不正确,而应该是:

if (password_verify(
        mysqli_real_escape_string(
            $link, 
            $_POST['password']
        ), 
        $row['password']
    )
) {

<小时/> 作为Jens mentioned,您不应该在对其进行散列之前转义密码。这个answer有一些深入的信息,说明为什么在散列之前不应该转义密码。

作为RiggsFolly mentioned,即使您转义输入,您的SQL查询仍然是vulnerable to SQL injections