我正在使用Django开发一个Web应用程序。
目前我正在发送“重置密码链接”彻底的电子邮件(亚马逊简单电子邮件服务 - SES)
我使用的机制与链接下面的“simeonwillbanks”的答案相同
Secure ways to reset password or to give old password
我担心这一点,我不确定这种方式在安全性方面是否安全。如果电子邮件被黑客捕获怎么办?
我在几个主要网站上测试了他们如何关心这一点。
通过此测试,我发现其他人也只能通过链接更改我的密码。
如果我无法在链接上执行任何操作,是否可以使电子邮件更安全? 就像网站上的ssl(https)机制一样?
谢谢!
答案 0 :(得分:2)
虽然用户的电子邮件遭到入侵,但它有点安全。
我更喜欢在网址中使用HMAC,这样可以避免在数据库中存储令牌。
如果您在URL和HMAC中包含用户的IP地址,则可以确保重置链接点击来自请求重置的同一台计算机(实际上是路由器),并且无法共享。
您可以使用用户名/电子邮件和HMAC设置device cookie,而不是IP,然后在重置链接从电子邮件中进入时检查此项。
系统应在用户点击链接后询问用户对机密问题的答案。更好的是,使用短随机码向他的手机发送短信并提出要求。这称为https://en.wikipedia.org/wiki/Multi-factor_authentication
然后显示更改密码表单(当然是通过HTTPS)。
当我们在这里时,无论用户是否拥有帐户,都应显示相同的“成功”消息,以避免用户枚举攻击。
此外,使用localhost MTA中继或异步电子邮件,以便黑客无法判断您是否发送了电子邮件(响应速度缓慢表示用户存在)。