我在使用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']))) {
它总是作为无效密码出现,即使我知道我正确输入它。
有人可以帮忙吗?
答案 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。