生成电子邮件验证链接

时间:2009-07-14 13:41:25

标签: asp.net security validation email

对于Web应用程序,我想生成一个电子邮件验证链接并将其发送给用户。与许多公共网站一样,用户应点击它来验证他的电子邮件地址。看起来类似于:

http://www.foo.bar/validation?code=421affe123j4h141k2l3bjkbf43134kjbfkl34bfk3b4fkjb43ffe

有人可以帮我提一些关于正确生成这些验证令牌的提示吗?谷歌搜索最佳实践证明比我更困难。链接应该:

  • ...不要求用户先登录。
  • ...未透露任何登录凭据以确保应用程序安全
  • ...允许我作为开发人员有效地验证令牌。我很确定我需要一种方法从代码中提取用户标识符以满足此条件。不是吗?

此外,你会找一个保存在某个地方的随机代码,还是我可以重新计算以验证的生成代码?

感谢您的回复!

的Matthias

P.S。我正在使用ASP.NET 3.5,以防有一个开箱即用的功能来执行此操作。

4 个答案:

答案 0 :(得分:5)

一些建议可以帮助您入门:

  • 使用GUID
  • 使用某种盐渍哈希(MD5,SHA1等)
  • 使用随机字符串(字符越多,碰撞的可能性就越小)
  • 暂时将其存储在数据库中,并将其加上时间戳,使其在一段时间后过期

答案 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()),将其存储为该用户的验证令牌,并将其包含在验证链接中。