对于Web应用程序,我想生成一个电子邮件验证链接并将其发送给用户。与许多公共网站一样,用户应点击它来验证他的电子邮件地址。看起来类似于:
http://www.foo.bar/validation?code=421affe123j4h141k2l3bjkbf43134kjbfkl34bfk3b4fkjb43ffe
有人可以帮我提一些关于正确生成这些验证令牌的提示吗?谷歌搜索最佳实践证明比我更困难。链接应该:
此外,你会找一个保存在某个地方的随机代码,还是我可以重新计算以验证的生成代码?
感谢您的回复!
的Matthias
P.S。我正在使用ASP.NET 3.5,以防有一个开箱即用的功能来执行此操作。
答案 0 :(得分:5)
一些建议可以帮助您入门:
答案 1 :(得分:2)
最简单的方法是生成GUID,将其存储在数据库中,将其绑定到用户帐户,然后给它们一个时间范围,在该时间范围内单击具有该GUID的链接。
验证他们是正确的人,而不会使URL可计算,同时使其抵制字典式攻击。
答案 2 :(得分:2)
我以可以重新创建的方式构造哈希:
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做一些数学
答案 3 :(得分:1)
我可能会使用Guid
。只需创建Guid
(通过调用Guid.NewGuid()
),将其存储为该用户的验证令牌,并将其包含在验证链接中。