Email 网站用户重置密码的安全有效方法是什么?

Email 网站用户重置密码的安全有效方法是什么?,email,passwords,usability,Email,Passwords,Usability,许多网站采用不同的方法,我很难决定哪种方法最适合我的网站 我的用户配置文件包含以下数据: username password (in hash/digest form) email 我希望密码重置方法安全、用户友好且高效。您不应该存储用户的密码,即使是加密形式的密码。您应该只存储身份验证所需的哈希/摘要。然后,您无法“恢复”密码(因为您不知道它),您可以重置它,和/或给用户一个临时一次性密码,允许他设置新密码 更新:如果您正在执行上述操作,标准程序是使用“需要密码重置”表单。用户输入他的id(

许多网站采用不同的方法,我很难决定哪种方法最适合我的网站

我的用户配置文件包含以下数据:

username
password (in hash/digest form)
email

我希望密码重置方法安全、用户友好且高效。

您不应该存储用户的密码,即使是加密形式的密码。您应该只存储身份验证所需的哈希/摘要。然后,您无法“恢复”密码(因为您不知道它),您可以重置它,和/或给用户一个临时一次性密码,允许他设置新密码

更新:如果您正在执行上述操作,标准程序是使用“需要密码重置”表单。用户输入他的id(通常是他的电子邮件),然后生成一个“令牌”(例如,一个随机字符串),存储在某个具有某个过期日期的表中,并发送到他的电子邮件以及“密码重置”表单的链接。在这种形式下,检查令牌,允许用户输入新密码,并指示用户尝试新登录

更新2:可能会出现一个小的隐私问题:如果请求表单中输入的用户id(电子邮件、用户名或其他)在我们的数据库中不存在,我们该怎么办?输出消息“用户不存在。请检查id,然后重试。”可能可以,但在某些情况下会导致隐私问题:任何人都可以检查其他人是否已在您的数据库中注册!如果要避免这种情况,必须输出相同的消息(“已发送带有说明的邮件…”),即使找不到用户(因此未实际发送邮件)。
类似的隐私问题建议,当用户尝试登录失败时,只输出消息“登录错误:错误的用户或密码”-不要透露是否是错误的用户或密码。

我同意Leonbloy的观点。存储密码会带来麻烦,比如几周前的Gawker事件(发现并发布了150万个用户ID/pwd组合)

但是,您应该具有“重置密码”功能,将新密码通过电子邮件发送到用于打开帐户的原始电子邮件地址

在密码重置期间,不应设置更改电子邮件地址的设置。如果用户不能再访问旧的电子邮件帐户,那就太糟糕了。放弃账户,重新开始


并在重置屏幕上使用良好的验证码。

您应该添加两个字段,重置代码和重置到期

这是安全密码重置功能的过程

  • 用户选择“忘记密码”

  • 提示用户输入电子邮件/用户名

  • 如果有效,则生成一个GUID,并将其存储在reset_代码中,还针对该特定用户在数据库中存储Now()+24小时的reset_到期时间

  • 然后,它会向电子邮件地址发送一封电子邮件,其中包含确认密码重置的链接。此电子邮件将包含一个指向您网站的链接,其中嵌入了用户的用户名和重置代码。(这可以阻止恶意用户仅通过知道其电子邮件就重置第三方密码)

  • 一旦用户单击电子邮件中的链接,他们将被定向到您的网站。 您的网站将验证:用户名和重置\u代码匹配,并且当前时间未超过重置\u到期时间

  • 如果一切正常,我们可以完成密码重置。这可以通过以下任一方式完成:
    a) 屏幕上随机生成的新密码
    b) 通过电子邮件随机生成的新密码
    c) 能够输入他/她自己选择的密码


很抱歉,我确实存储了哈希/摘要,我所说的恢复是指重置:)+1@绝对0:想想如果有人窃取了你的密码数据库会发生什么。如果密码是散列的,那么就不会有太大的损失(您已经被拥有,但至少攻击者无法使用密码数据库进行任何操作)。但是,如果您存储了密码,并且您的用户在您的网站上使用的密码与在他们的电子邮件中使用的密码相同(而且他们会这样做)然后,当他们的电子邮件也被黑客攻击时,他们会责怪你…@Absolute0:你的评论被忽略了-很高兴听到你做了正确的事情:)如果使用随机生成的密码,一定要调整复杂性以匹配用户的能力。i、 e.如果你的用户不懂电脑,不要使用大量非字母数字。此外,请确保从输入的密码中删除空格,因为它们可能会从电子邮件中剪切粘贴,这通常会占用额外的空格。一些字符限制和替换也是不错的主意:从字符列表中删除
{0,1,2,3,5,l}
,将所有内容按大小写,并应用类似
[0,1,2,3,5,l]>[o,i,z,b,s,i]
返回用户返回的密码。之所以有“3”,是因为当没有熟悉的上下文时,“B”经常被误认为是“3”,其他的应该是清楚的。