我创建了一个忘记密码链接,一切正常(密码重置,令牌设置回"",密码正确哈希)但是当我尝试使用我的新密码登录时,我的脚本登录。 inc.php无法识别新密码。我也没有任何错误。如果有人能教我做错了什么,我真的很感激。
复位password.php:
task.json
login.inc.php:
<?php
session_start();
include 'database/login-dbh.php';
if (isset($_GET["email"]) && isset($_GET["token"])) {
$email = $_GET['email'];
$token = $_GET['token'];
$sql = "SELECT id FROM user WHERE email='$email' AND token='$token'";
$result = mysqli_query($conn, $sql);
$num_rows = mysqli_num_rows($result);
if ($num_rows > 0) {
$str = "0123456789qwertyuiopasdfghjklzxcvbnm";
$str = str_shuffle($str);
$str = substr($str, 0, 35);
$password = password_hash($str, PASSWORD_DEFAULT);
$sql = "UPDATE user SET password='$password', token='' WHERE email='$email'";
mysqli_query($conn, $sql);
echo "Your new password is: $str";
}
}else{
header("Location: forgot-password.php?error=token+not+found");
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Yahbang</title>
<link rel="stylesheet" type="text/css" href="stylesheet/forgotpassword-style.css">
</head>
<header>
</header>
<body>
</body>
</html>
答案 0 :(得分:2)
首先,你的reset-password.php文件是不安全的,因为你要接受SQL注入。您不应该在SQL语句中直接使用GET / POST
变量。始终首先保护变量(此处有很多帖子)。
这就是说,我需要看看你的password_verify()
功能。要调试,我使用了一些技巧:
$_POST
个变量:print_r($_POST);
print_r($row);
在那里的某个地方,你错过了一些东西,但是通过这些简单的技巧,你会发现它们。