我在注册新帐户时正在写用户电子邮件的确认信息
一切都按照以下原则进行:我们接收用户的电子邮件,创建一个 10000 - 99999 之间的随机数,使用此代码创建 cookie 并通过电子邮件将代码发送给他
$user_email = trim(filter_var($_POST['email'], FILTER_SANITIZE_EMAIL));
$code = trim(rand(10000, 99999));
setcookie("code", $code, time() + 60 * 5, "/lib/check_mail.php");
mail($user_email, 'Код подтверждения адреса Эл.Почты', $code);
header('Location: /lib/check_mail.php');
在下一个窗口中,我们将用户输入的代码与通过电子邮件发送的代码进行比较
$code = $_POST['code'];
$user_code = $_COOKIE['code'];
if ($code == $user_code){
// Код введен верно
} else {
// Код введен НЕ верно
}
问题:此代码的安全性和最新程度如何?如何使检查用户的电子邮件更加相关和安全?
使用cookie来存储验证码
将验证码存储在cookie中并不安全,因为cookie可能被拦截或篡改。相反,您需要将代码存储在数据库或会话中。例如,您可以使用 EditThisCookie 扩展或其他服务自行分析。
验证码有效期
您将代码到期日期设置为 5 分钟,希望防止暴力攻击。您可以限制尝试输入代码的次数或使用验证码来防止暴力破解。还建议将其设置为一次性的,以提高安全性。
以下是用于验证用户电子邮件地址的更安全且更新的代码示例: