请帮助我,不管我做得对吗?
是否还有其他安全机制?
[编辑] 谢谢,我收到你的回复。真的,这是一种安全的机制。但在这里我几乎没有怀疑
请帮帮忙?
答案 0 :(得分:12)
我明白为什么你想要一个CAPTCHA,但我会采取不同的方法。
对于那些认为你应该告诉用户电子邮件去了哪里的人,我强烈不同意。这是“信息泄露”,即使您将其限制为域名。例如,我说我已经在JeffAtwoodEatsBabies.com上注册为blowdart。如果Jeff要求我重置密码并且您显示了注册域,那么他会看到idunno.org。这是我的个人领域,因此杰夫知道,吹风用户实际上就是我。这是一个坏的的事情。我不应该使用hotmail或gmail或其他任何东西注册,以保护自己免受代码向所有人显示电子邮件域名。
此外,您根本不应该显示错误消息。无论发生什么情况,用户名实际上都没有注册,或者提出的请求太多或天空已经下降,您应该告诉用户密码重置过程已经开始。通知用户帐户不存在是更多信息泄露。
您可以做的最后一件事是将CSRF令牌添加到重置请求页面,因此无法从其他网站驱动它。
跟进
所以回答你的进一步问题。
答案 1 :(得分:6)
有很多方法可以实施。正如您所说,生成新密码并将其发送到注册的电子邮件地址是一种方法。我不建议你走这条路,因为每次有人试图猜测我的密码时我的密码都会重置。
相反,我迄今为止看到的最好的事情就是通过电子邮件发送已注册的电子邮件,其中包含将开始密码重置过程的链接。您甚至可以通过显示注册时使用的电子邮件地址的屏蔽版本来让用户知道要检查的电子邮件地址:
已向
********
@ hotmail.com发送了一封电子邮件。请检查您的收件箱以继续。
请务必考虑我们这些可能忘记注册了哪个电子邮件地址的人 - 通常一些安全问题是提供这些信息的好方法。
答案 2 :(得分:4)
我最近这样做了。当用户输入用户名或电子邮件地址时,我们会生成一个唯一的令牌,并通过电子邮件将其作为链接的一部分发送给他们收到该电子邮件后,他们会点击该链接,并自动登录,进入我的帐户屏幕,并提示重置密码。
当然,这完全取决于电子邮件客户端的安全性,但从可用性的角度来看,它很难被击败。
答案 3 :(得分:0)
你应该在security.stackexchange上的Can anyone provide references for implementing web application self password reset mechanisms properly?检查问题的答案:D.W.。
这是我在这个问题上找到的最完整的答案。我还建议你阅读这篇文章:Everything you ever wanted to know about building a secure password reset feature