【问题标题】:Generation of Email Validation Links电子邮件验证链接的生成
【发布时间】:2010-11-10 15:51:45
【问题描述】:

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

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

任何人都可以帮助我提供一些关于正确生成这些验证令牌的提示吗?谷歌搜索最佳实践比我想象的要困难得多。链接应该:

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

此外,您会选择保存在某处的随机代码,还是我可以重新计算以进行验证的生成代码?

感谢您的回复!

马蒂亚斯

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

【问题讨论】:

    标签: asp.net security validation email


    【解决方案1】:

    我可能会使用Guid。只需创建一个Guid(通过调用Guid.NewGuid()),将其存储为该用户的验证令牌,并将其包含在验证链接中。

    【讨论】:

      【解决方案2】:

      一些帮助您入门的建议:

      • 使用 GUID
      • 使用某种加盐哈希(MD5、SHA1 等)
      • 使用随机字符串(字符越多,发生冲突的可能性越小)
      • 将其临时存储在数据库中,并为其添加时间戳,使其在一段时间后过期

      【讨论】:

        【解决方案3】:

        最简单的方法是生成一个 GUID,将其存储在与用户帐户相关联的数据库中,然后给他们一个时间范围,在该时间范围内单击带有该 GUID 的链接。

        这验证了他们是正确的人,而不会使 URL 可计算,同时使其能够抵抗字典式攻击。

        【讨论】:

          【解决方案4】:

          我以一种可以重新创建的方式构造哈希:

           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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-15
            • 2016-08-31
            • 2019-05-20
            • 1970-01-01
            • 1970-01-01
            • 2019-11-27
            • 1970-01-01
            • 2012-07-23
            相关资源
            最近更新 更多