我在 php 登录系统中的 ResetPassword.php 出现错误,因为您的旧密码错误

Posted

技术标签:

【中文标题】我在 php 登录系统中的 ResetPassword.php 出现错误,因为您的旧密码错误【英文标题】:My ResetPassword.php in php login system is giving error as Your old password is wrong 【发布时间】:2018-09-13 14:33:21 【问题描述】:
<?php
    if(isset($_POST['re_password']))

    if (isset($_GET["token"]) && isset($_GET["email"])) 
        $connection = new mysqli("localhost", "id4767104_root1", "Deepak@1", 
    "id4767104_phpusernameconfirmation");

        $email = $connection->real_escape_string($_GET["email"]);
        $token = $connection->real_escape_string($_GET["token"]);

        $data = $connection->query("SELECT id FROM users WHERE email='$email' 
    AND token='$token'");

        if ($data->num_rows > 0) 
        $old_pass=$_POST['cpass'];
        $new_pass=$_POST['newpass'];
        echo "$old_pass";
        $re_pass=$_POST['newpass1'];
        $chg_pwd=mysqli_query("select id, password from users where 
    email='$email'");
        $chg_pwd1=mysqli_fetch_array($chg_pwd);
        echo "$chg_pwd1";
        $data_pwd=$chg_pwd1['password'];

    if($data_pwd==$old_pass)

    if($new_pass==$re_pass)
            $hashedPassword = password_hash($new_pass, PASSWORD_BCRYPT);
            $update_pwd=mysql_query("UPDATE users SET password='$new_pass', 
    token = '' WHERE email='$email'");
            echo "<script>alert('Update Sucessfully'); 
    window.location='index.php'</script>";
        

    else
            echo "<script>alert('Your new and Retype Password is not match'); 
    window.location='index.php'</script>";
        
        

    else
        
        echo "<script>alert('Your old password is wrong'); 
    window.location='register.php'</script>";
        


             else 
            echo "Please check your link!";
        
     else 
        header("Location: login.php");
        exit();
    
?>

【问题讨论】:

$data_pwd 是散列密码吗? 您的脚本存在SQL Injection Attack 的风险。看看Little Bobby Tables 发生了什么。甚至if you are escaping inputs, its not safe!。请改用prepared parameterized statements。 是的 $data_pwd 是散列密码 比你需要使用password_verify 让它与你的新密码比较 嗨,J.Ende,作为我的初学者,你能否详细说明一下,因为我在这段代码中坚持了几天,谢谢! 【参考方案1】:

当您使用password_hash 存储密码时。您需要将密码与password_verify 进行比较。更改您的条件if($data_pwd==$old_pass) 如下:

if(password_verify($old_pass,$data_pwd))

【讨论】:

作为初学者,请您详细说明一下! 正如我已经提到的,每当您使用 password_hash 方法存储密码时。它将存储在 hash 中,不会存储为普通文本。所以你需要在比较密码的同时使用password_verify。你可以得到通知php.net/manual/en/function.password-verify.php和php.net/manual/en/function.password-hash.php

以上是关于我在 php 登录系统中的 ResetPassword.php 出现错误,因为您的旧密码错误的主要内容,如果未能解决你的问题,请参考以下文章

从登录表单系统中的单独文件执行 PHP 错误消息的问题

php中怎么用session来控制页面的访问权限?

php中怎么用session来控制页面的访问权限?

PHP/SQL 登录表单 - 如何检查数据库中的密码

PHP面向对象中的多态示例

PHP 中的登录集成