单击过期链接如何从重置密码的上下文中工作

时间:2011-11-24 08:23:47

标签: c# asp.net email hyperlink password-recovery

我正在设计&开发“重置密码”表单,其中用户提供用户名/电子邮件地址,以便应用程序在电子邮件中发送链接,以便用户单击并键入新密码。我的兴趣是关于这个链接,我应该如何继续做这些工作(我不是在寻找基于意见的答案,而是寻找行业惯例,适用于您的应用的步骤)。

  • 确保链接未启用书签(不允许他使用相同的链接重置密码)

  • 如果链接还包含到期信息,如果他点击过期链接会发生什么

您还可以通过提供我可能面临的当前执行计划的其他问题来帮助我。

3 个答案:

答案 0 :(得分:3)

我刚刚实施了类似的东西。

  1. 用户点击“丢失的密码”并输入电子邮件地址。

  2. 在提交时,生成重置代码,以便主密码不受影响。 (也应该是盐哈希)。设置使用重置代码的超时时间。

  3. 用户访问更改密码表单。输入电子邮件,重置密码,新密码和确认密码。成功时,清除重置代码并设置新密码,重定向到登录页面。

  4. 我决定将重置代码作为网址的一部分,以便让用户更轻松。至于书签,嗯,你不能保护所有这样的用户。如果他们想要为该页面添加书签,请让他们。上述措施应该阻止他们提交任何不合时宜的内容。

答案 1 :(得分:2)

在重置表单的提交中,您生成一个随机代码,将其存储在数据库中(如果需要,可以使用过期信息,如果已经使用过,则将其存储)并将其作为参数包含在链接中。

该链接将用户带回到重置表单,您可以在其中检查代码(参数)是否在数据库中且尚未过期或已使用过。

答案 2 :(得分:2)

我喜欢的方法是创建一个看起来像这样的字符串:[username] [currentPassword] [expirationDate],哈希它,然后创建一个类似于:resetPassword的链接。 ?PHP的用户名= [用户名]&安培; EXP = [EXPIRATIONDATE]&安培;散列= [散列]

在resetPassword.php中,您使用GET参数中的信息+您使用的旧密码验证此哈希值,如果哈希值匹配,请继续重置密码。 这样,链接将在到期时到期,并且在密码更改后无法使用该链接重置密码。

另一种方法是将重置密码代码存储在数据库中。