Password reset by emailing temporary passwords
我公司的一个团队正在为我们的应用程序实现一个单一的登录RESTAPI。此身份验证服务具有密码重置功能。应用程序将用户名发送到重置函数。如果该用户名与电子邮件地址关联,则会向该地址发送一封带有临时密码的电子邮件。
另一种方法似乎是通过电子邮件发送一个安全的临时链接的网站,该链接显示一个页面,供用户输入新密码。此页仅在短时间内存在。
我知道电子邮件不是一个安全的协议,所以人们可以嗅探流量并恢复临时密码或临时链接。
是否有任何重要的安全原因使一种方法优于另一种方法?还有其他更安全的方法吗?
Are there any significant security reasons to prefer one method over the other?
号
对。如果你走临时密码路线,那么任何人都可以通过不断点击重置链接并输入该用户的电子邮件地址来烦扰用户。如果使用密码重置链接,用户可以忽略它们并删除电子邮件。
在这两种情况下,私有信息(临时密码或重置链接)都通过同一介质传输。从这个角度来看,安全性没有区别。但是,重置链接有几个优点:您强制用户选择新密码。一旦他这样做,链接就无效,不能被滥用。相反,临时密码往往不像你喜欢的那样临时。即使在下次登录时强制用户选择新密码,他也可能再次输入临时密码。
此外,您可以记录使用重置链接的人的IP,因此如果需要,至少有一些东西可以移交给当局。
对于普通大众来说,没有更好的方法。如果这是一个内部应用,你可以想象发送加密电子邮件,用户必须用pgp解码,但这永远不会飞到外部用户,除非你有一个非常高价值,利基产品。
如果电子邮件不在,你必须使用安全问题之类的问题,但它们有自己的问题(在我看来更重要)。问题包括:
- 可以猜测。像"最喜欢的颜色"这样的问题很容易被猜测出常见的选择,如"红"、"蓝"、"绿"等。
- 可找到。很多都是来自facebook/myspace/twitter/flickr个人资料或其他googleable的东西。
- 容易忘记。我选择了"最喜欢的度假胜地",然后一两年后就记不起我选了什么。
- 很难分析。如果我输入"圣保罗"作为一个城市名称,但后来又返回"圣保罗",这会被接受吗?
有很多更安全的方法可以重置密码。所有这些对您的用户来说都非常不方便,维护成本也很高。让每个用户向您发送一个DNA样本和指纹,然后要求他们亲自到场进行验证,这将有助于您的安全。我很惊讶您的绝密组织允许您获得有关stackoverflow的安全建议。别开玩笑了,您的应用程序需要多安全?攻击者真的会重置您的用户密码然后访问他们的电子邮件吗?
XKCD总是说最好http://xkcd.com/538/