我编写了密码恢复代码。其中,如果任何现有用户在必填字段中输入他的电子邮件,则密码恢复链接将通过他的电子邮件发送,然后如果他点击收到的链接,他将进入密码恢复页面。它工作完美。在电子邮件中设置密码恢复时间
但我需要时间链接。意思是如果我在60秒内为电子邮件设置了60秒密码恢复链接。用户可以恢复密码,否则链接将失败。我不知道该怎么办?请给我提示。
我在表中的字段有:姓名,电子邮件,手机,密码,密码
update.php(对于插入电子邮件发送恢复电子邮件中的链接)
<?php
include("connection.php");
extract($_POST);
if(isset($email)==true)
{
$query=mysql_query("select * from account where email='$email'") or die(mysql_error());
$result=mysql_num_rows($query);
if($result==1)
{
$salt = "498#2D83B631%3800EBD!801600D*7E3CC13";
$restkey = hash('sha512', $salt.$email);
mysql_query("update account SET passcode='$restkey' where email='$email'") or die(mysql_error());
$to="$email";
$subject="Password Reset";
$pwrurl = "demo.cstechnology.net/updatepass.php?restkey=".$restkey;
$message="To reset your password, please click the link below. If you cannot click it, please paste it into your web browser's address bar.\n\n" . $pwrurl . "\n\nThanks,\nThe Administration";
$header="FROM:[email protected]";
mail($to,$subject,$message,$header);
}
else
{
echo "Invalid Email";
}
}
?>
<form action="" method="post">
<table>
<tr><td>Email</td><td><input type="email" required name="email" /></td></tr>
<tr><td></td><td><input type="submit" name="submit" value="submit" /></td></tr>
</form>
updatepass。 php(点击电子邮件中的恢复电子邮件链接,密码将会更新)
<?php
session_start();
include("connection.php");
extract($_REQUEST);
extract($_POST);
if(isset($submit)==true)
{
$query=mysql_query("update account SET password='$password' where passcode='$restkey'") or die(mysql_error());
echo"Password Updated Successfully";
}
if(isset($restkey)==true)
{
echo"<form action='' method='post'>
<table>
<tr><td>Password</td><td><input type='password' required name='password' /></td></tr>
<tr><td></td><td><input type='submit' name='submit' value='submit' /></td></tr>
</form>";
}
?>
'$ salt =“498#2D83B631%3800EBD!801600D * 7E3CC13”;'对于每个存储的证书,盐应该是唯一的([OWASP:密码存储备忘录](https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet#Use_a_cryptographically_strong_credential-specific_salt)) – Andreas
$ salt是唯一的,我用$ email添加它。 – user3189881
我不会在现场环境中使用此代码;它并不像你想象的那么安全。 –