<?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小时而不是永远。 抱歉,我还是所有这些新手。
亲切的问候。
答案 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部分中将其删除,不要忘记将所有变量替换为实际值 查找错误将大有帮助