我正在寻找关于在ASP.NET中实现密码恢复服务的一些指导,该服务通过电子邮件发送指向用户的链接,该链接将其发送到密码重置页面,因为我不想以明文形式通过电子邮件发送现有或重新生成的密码。登记/>
我已经看到了使用成员id作为查询字符串参数的一些建议,但是我觉得这可能会被滥用,因为我正在使用的自定义成员资格表使用guid作为id字段的内部。
我想我需要创建一个包含唯一(长)id的自定义表以及每次用户请求密码恢复时填充的成员ID。然后,此ID将作为密码重置页面链接中查询字符串的一部分传递。
当用户点击链接时,页面将在自定义表中查找id并从中获取成员ID,允许用户根据该成员身份更改密码。
这看起来像是一种有效的方法;这有点难过吗?任何其他建议将不胜感激。
答案 0 :(得分:3)
这将是我如何处理它。但是,当您完成并实施某种洪水控制时,不要忘记从数据库中删除该行。我知道guids有很多(字面上的)组合,但运行简单的IP检查与过去5分钟内的多少次尝试以及在x次尝试后阻止它们有助于提高重置的安全性。对于用户群越大以及忘记密码的频率,这一点就越重要。
答案 1 :(得分:2)
听起来很完美。我唯一的建议是使用计算值而不是随机ID作为电子邮件链接。也许这个人用户名的哈希版本?这纯粹是我对随机数字的蔑视。 :)