重置密码链接重置密码,但login.php无法识别新密码

时间:2018-02-18 16:04:04

标签: php php-password-hash

我创建了一个忘记密码链接,一切正常(密码重置,令牌设置回"",密码正确哈希)但是当我尝试使用我的新密码登录时,我的脚本登录。 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>

1 个答案:

答案 0 :(得分:2)

首先,你的reset-password.php文件是不安全的,因为你要接受SQL注入。您不应该在SQL语句中直接使用GET / POST变量。始终首先保护变量(此处有很多帖子)。

这就是说,我需要看看你的password_verify()功能。要调试,我使用了一些技巧:

  • 打印您收到的$_POST个变量:print_r($_POST);
  • 打印您的SQL语句
  • 打印$ row变量的结果:print_r($row);

在那里的某个地方,你错过了一些东西,但是通过这些简单的技巧,你会发现它们。

相关问题