PHP的忘记密码恢复

时间:2019-10-06 18:02:15

标签: php

我在uni项目上工作,我坚持密码恢复。 一切正常,发送邮件,输入新密码,然后进入数据库。 但是问题是它没有md5加密,并且在我的数据库中很好看。如何在md5中对其进行实际加密。 在我的代码下面:

<?php

$email = $_POST["email"];
$reset_token = $_POST["reset_token"];
$new_password = $_POST["new_password"];

$connection = mysqli_connect("localhost", "root", "", "registration");

$sql = "SELECT * FROM users WHERE email = '$email'";
$result = mysqli_query($connection, $sql);
if (mysqli_num_rows($result) > 0)
{
    $user = mysqli_fetch_object($result);
    if ($user->reset_token == $reset_token)
    {
        $sql = "UPDATE users SET reset_token='', password='$new_password' WHERE email='$email'";
        mysqli_query($connection, $sql);

        echo "Password has been changed";
    }
    else
    {
        echo "Recovery email has been expired";
    }
}
else
{
    echo "Email does not exists";
}

就像Im在这里已经问过的那样,如何设置令牌24小时而不是永远。 抱歉,我还是所有这些新手。

亲切的问候。

2 个答案:

答案 0 :(得分:-1)


要加密密码/字符串,可以使用PHP函数password_hash() 我个人不建议使用MD5,因为使用彩虹表很容易破解MD5哈希值。要进行测试,请创建一个MD5字符串,然后将其输入https://www.crackstation.net中。
我的建议是使用河豚。
如果您想知道如何在脚本中实现它:

$new_password = password_hash($_POST['new_password'], PASSWORD_BCRYPT);
// BRYPT is hashing / encrypting it using Blowfish which is a very powerful encrypting method.

如果您想要更好的安全性,可以使用盐。 有关更多信息:
What is SALT and how do i use it?
如果涉及到安全性,则您的SQL查询并不安全,并且容易受到SQL注入的攻击。 (How can I prevent SQL injection in PHP?
简而言之,如果您不知道它是什么:SQL注入是一种修改SQL查询的方法。详细信息:https://www.w3schools.com/sql/sql_injection.asp
使用准备好的语句来保护您的SQL代码,否则任何黑客都可以轻松地进入MySqli数据库。
希望对您有帮助,
亲切的问候,

PS。如果要再次登录并检查用户是否输入了正确的密码,请使用password_verify()验证用户是否使用正确的密码登录。

答案 1 :(得分:-1)

使用

password=MD5($new_password) 

在您的更新查询中它将起作用,如果您遇到任何类型的错误,只需复制整个查询并在phpmyadmin的SQL部分中将其删除,不要忘记将所有变量替换为实际值 查找错误将大有帮助