代码之家  ›  专栏  ›  技术社区  ›  Brian

无需通过电子邮件发送密码即可恢复密码

  •  4
  • Brian  · 技术社区  · 16 年前

    所以,我一直在玩 asp:PasswordRecovery 发现我真的不喜欢它,有几个原因:

    1) 即使没有访问Alice电子邮件的权限,Alice的密码也可以重置。密码重置的安全问题缓解了这一问题,但并不能真正让我满意。

    2) Alice的新密码以明文形式发送回她。我宁愿给她发一个指向我的页面的特殊链接(例如example.com/recovery.aspx?P=lfaj0831uefjc),这样她就可以更改密码了。

    2 回复  |  直到 16 年前
        1
  •  4
  •   Stephen C    14 年前

    我目前正在实现一个开源软件 user management system 在Spring+SpringSecurity的基础上,下面是我如何解决密码丢失问题的。

    1. 用户帐户必须具有预注册的电子邮件地址。
    2. 将生成一个临时“重置代码”,并将其附加到帐户,然后通过电子邮件发送给嵌入超链接的用户。
    3. 在收到电子邮件时,用户单击链接将他们带到页面以输入新密码。
    4. 在接受新密码之前,将对照存储的密码检查重置代码(来自链接),以确保其正确且未过期。

    这样可以避免在电子邮件中发送密码(以明文形式)。它还可以防止一个人重置另一个人的密码只是为了制造麻烦,因为密码重置只在链接被使用后发生。

    但它确实依赖于用户的电子邮件帐户的安全性,并且在电子邮件传输过程中不会被窥探。对于某些应用程序,这可能是不可接受的风险。

        2
  •  2
  •   meme    16 年前

    我建议增加额外的检查级别,这里有一些选项可供选择。

    1. 首先,您可以将请求者的IP地址保存在数据库中,然后当他们单击重置链接时,将其与当前机器的IP地址进行比较,如果匹配,则重置密码。如果截获电子邮件,则试图重置密码的人必须具有匹配的IP地址。
    2. 使用cookie并存储唯一的值,可能是GUID、MD5哈希或其他。因此,当用户发出密码重置请求时,cookie存储在他们的计算机和数据库中,当用户单击链接时,本地cookie必须与数据库值匹配,否则他们将无法重置密码。

    一般来说,我完全反对在电子邮件中发送密码,因此我更喜欢密码重置链接选项,而不是新的纯文本密码。