生成电子邮件验证链接
问题描述:
对于Web应用程序我想生成一个电子邮件验证链接并将其发送给用户。像许多公共网站一样,用户应该点击它来验证他的电子邮件地址。类似于此:生成电子邮件验证链接
http://www.foo.bar/validation?code=421affe123j4h141k2l3bjkbf43134kjbfkl34bfk3b4fkjb43ffe
任何人可以帮我约昭穆这些验证令牌的一些提示?谷歌搜索的最佳实践结果比我想象的要困难得多。链接应该:
- ...不要求用户先登录。
- ...不透露任何登录凭据以保持应用程序安全
- ...允许我作为开发人员有效验证令牌。我很确定我需要一种方法从代码中提取用户标识符以符合此标准。不是吗?
此外,你会去随机代码,这是保存在某处,或生成的代码,我可以重新计算验证?
感谢您的回复!
Matthias
P.S.我正在使用ASP.NET 3.5,以防有这种功能的开箱即用。
答
一些建议,让你开始:
- 使用GUID的
- 使用某种咸散列(MD5,SHA1等)
- 使用字符的随机字符串(多个字符越少可能你就会有冲突)
- 存储在数据库中暂时,并使其在一定的时间段后到期时间戳记它
答
最简单的方法是生成一个GUID,将其存储在数据库中,将其绑定到他们的用户帐户,然后给他们一个时间范围,在该时间范围内点击一个带有该GUID的链接。
验证它们是正确的人没有使URL可计算,同时使其抵御字典式的攻击。
答
我构建了散列,可以重新创建一个方法:
code = MD5(my_hash + user_email + register_timestamp)
然后把链接发给http://example.com/validation/?code = 4kj34 ....
验证进行查找,如:
SELECT id
FROM users
WHERE
MD5(CONCAT(my_hash, user_email, register_timestamp)) = code
AND activated = 0
如果您得到单个结果,请更新其“激活”字段并签名。您也可以在他们的'register_timestamp'字段中为穷人的TTL做一些数学运算。
+1良好且完整的答案 – 2009-07-14 13:46:22