电子邮件激活安全校验和

时间:2011-06-23 22:16:43

标签: php checksum

我一直在询问我的网站上的一些反馈,我收到的一条评论是以下

“我使用email@email.com注册并设法通过http://www.mysite.co.uk/activateuser.php?email=email@email.com

激活我的帐户

你需要校验和来阻止它。“

任何人都可以详细说明这个以及如何将它们实现到我的激活中吗?


理论上,如果我要在我的数据库中创建一个名为“rand_key”的行,并且当用户注册随机密钥存储在列中时,我是否可以将其用作激活而不是电子邮件?从而使它无法猜测?

3 个答案:

答案 0 :(得分:2)

您需要创建一个唯一的用户密钥,该密钥不应与用户数据相关。通常你可以做一些像哈希随机生成器函数的输出,以使其独特并使用它。然后你将它们指向链接:

http://www.mysite.co.uk/activateuser.php?userid=generated-unique-hashed-key

此唯一用户密钥应作为额外字段添加到您存储用户信息的表中,或以其他方式与用户相关。通过保持与用户数据无关的密钥,您可以确保没有人能够发现用户的密钥并恶意激活/执行其他操作而不是您的用户。

然后你应该在到达时测试用户密钥的某些条件:

  • 尚未授权 - 授权
  • 已经授权 - 有些错误
  • 错误的密钥 - 有些错误

此外,应该有一个与您的用户相关的到期日期,您只需在其上停用该用户及其密钥。

答案 1 :(得分:1)

此人意味着您可以通过转到该网址并将电子邮件地址放在thr url中来激活您的地址。您可以在不实际获取激活电子邮件的情况下执行此操作。

通过使用校验和,您强制thr用户单击该链接。例如。 Activate.php email=aaa@bbb.com&检查= A1234b23

在发送电子邮件时,您将生成随机代码。将其存储在您的数据库中。将其附加到用户获得的URL。当用户单击该链接时,您将检查该代码是否与为该电子邮件地址存储的代码匹配。如果匹配,请验证电子邮件。否则不要。

答案 2 :(得分:1)

  

理论上,如果我要创建一行   在我的数据库中命名为“rand_key”并且当a   用户注册存储随机密钥   在专栏中,我可以使用它   作为激活而不是   电子邮件?从而使它无法猜测?

是。请注意,您不一定要随意添加任意内容(为了避免两个电子邮件地址意外获得相同的激活码)。

您可以执行以下操作:

$key = mt_rand().'-'.uniqid('', true);

echo 'http://mysite.com/activate?key='.urlencode(base64_encode($key));

这很难猜测,并且可以保证是唯一的。