Secure way to send “reset password” link
我正在使用django开发一个Web应用程序。
目前我正致力于发送"重置密码链接"彻底的电子邮件(亚马逊简单电子邮件服务-SES)
我使用的机制与下面链接的"SimeonWillbanks"的答案相同。
重置密码或提供旧密码的安全方法
我担心的是,我不确定这种方式在安全方面是否安全。如果电子邮件被黑客捕获怎么办?
我在几个主要网站上测试了他们是如何关心这个问题的。
通过这个测试,我发现其他人也只能通过链接更改我的密码。
如果我不能在链接上做任何事情,有没有办法使电子邮件更安全?就像网站上的ssl(https)机制一样?
谢谢!
它有点安全,但是如果用户的电子邮件被破坏,它就是Toast。
我更喜欢在URL中使用HMAC,这样可以避免在数据库中存储令牌。
如果在URL和HMAC中包含用户的IP地址,则可以确保重置链接单击来自请求重置的同一台计算机(实际上是路由器),并且不能共享。
您可以使用用户名/电子邮件和HMAC设置设备cookie,而不是IP,然后在电子邮件中出现重置链接时检查此项。
在用户点击链接后,系统应该向他询问一个秘密问题的答案。更棒的是,用一个短的随机码向他的手机发送一条短信,然后要求得到。这称为https://en.wikipedia.org/wiki/multi-factor_身份验证
然后显示更改密码表单(当然是通过https)。
当我们在这里时,无论用户是否有帐户,您都应该显示相同的"成功"消息,以避免用户枚举攻击。
此外,还可以使用本地主机MTA中继或异步电子邮件,这样黑客就无法判断您是否发送了电子邮件(响应缓慢会指示用户存在)。