我想知道如何在包含$_POST
数据的电子邮件中发送链接。它适用于php中的电子邮件重置功能。我真的不想发送带有像
http://example.reset.com/reset.php?token=5e51b695b8260632e55cad464039c2b4d7ec2cbca0331b881fabc4ada71cffac3808aa105ec5e9a9b693768774ddb6c3160359f9195c2e442c7c7a82ed849033
那么有可能意识到这一点吗?
我已经检查了令牌是否在数据库中,以及$exp_date_time
信息是否不旧。获得邮件后,用户只需30分钟即可更改密码。如果其中一个步骤不起作用,则尝试连接到reset.php
的人员将被重定向到index.php
。
现在我不想让一个Bot偶然得到积极回应。
对于信息,令牌长度为128,由生成的随机密码生成,并带有修改后的sha512哈希值。
如何让这更加安全?
干杯
Sven
其他信息:
我的数据库:
CREATE TABLE IF NOT EXISTS `email` (
`kasuser` varchar(12) NOT NULL DEFAULT '',
`be_mail` varchar(100) NOT NULL DEFAULT '',
`ba_mail` varchar(100) NOT NULL DEFAULT '',
`exp_date` varchar(19) NOT NULL DEFAULT '2000-01-01 01:01:01',
`token` varchar(200) NOT NULL DEFAULT '',
PRIMARY KEY (`kasuser`),
UNIQUE KEY `be_mail` (`be_mail`),
UNIQUE KEY `ba_mail` (`ba_mail`)
)
要获得类似上面的链接,您需要填写一个表单,如果backup_mail(ba_mail)在数据库中并且绑定到be_mail,您还必须使用表单进行检查。然后生成一个日期+ 30分钟,密码生成器生成一个令牌,该密码生成器散列密码并将最终产品保存到数据库。然后通过上面的链接向ba_mail发送电子邮件。
我也想知道是否可以生成一个"链接"隐藏的形式,将令牌发送到PHP需要它的$ _POST。但我怀疑,这将在电子邮件客户端中起作用,并且有些人只看到纯文本。所以我至少发送令牌作为GET或?
答案 0 :(得分:0)
您可以生成令牌并将其与您的数据库中的电子邮件一起存储,而不是通过电子邮件链接中的两个。
reset.php标记= 5e51b_etc&安培;电子邮件=测试%40example.com
$email = urldecode($_GET['email']);
$token = $_GET['token'];
您可以制作一个查询来检查您的数据库中的令牌和电子邮件是否匹配。
修改:您还会检查访问时间是否小于$exp_date_time
。
编辑2: 我只是注意到'我真的不想发送带有链接的电子邮件'。 您可以避免电子邮件“密码重置”中的链接。 使用get数据处理请求并使用有效的尝试/更改密码重定向,或者参数错误或请求太旧。我不担心场景中的网址。除非他们再次发送电子邮件重置,否则它不会成为访问者返回的内容。