我们公司的一个团队正在为我们的应用程序实施单点登录REST API。这个身份验证服务具有密码重置功能。应用程序向重置函数发送用户名。如果该用户名与电子邮件地址相关联,则会向该地址发送带有临时密码的电子邮件。
另一种方法似乎是向用户发送一个安全的临时链接,该链接呈现一个页面供用户输入新密码。此页面仅存在短时间。
我知道电子邮件不是安全协议,因此人们可以嗅探流量并恢复临时密码或临时链接。
是否有任何重要的安全原因来优先考虑其中一种方法?是否有另一种更安全的方法来做到这一点?
我们公司的一个团队正在为我们的应用程序实施单点登录REST API。这个身份验证服务具有密码重置功能。应用程序向重置函数发送用户名。如果该用户名与电子邮件地址相关联,则会向该地址发送带有临时密码的电子邮件。
另一种方法似乎是向用户发送一个安全的临时链接,该链接呈现一个页面供用户输入新密码。此页面仅存在短时间。
我知道电子邮件不是安全协议,因此人们可以嗅探流量并恢复临时密码或临时链接。
是否有任何重要的安全原因来优先考虑其中一种方法?是否有另一种更安全的方法来做到这一点?
在这两种情况下,私人信息(临时密码或重置链接)都通过相同的媒介传输。从这个角度来看,安全性没有区别。然而,重置链接有一些优点:您可以强迫用户选择一个新密码。一旦他这样做了,链接就无效,不能被滥用。相反,临时密码往往不像您希望的那样临时。即使您强制用户在下次登录时选择新密码,他可能仍会再次使用临时密码。
此外,您可以记录使用重置链接的人的IP地址,这样至少有一些东西可以在必要时交给当局。
两种方法中是否有重要的安全原因可以使一种方法优于另一种?
是的。如果您选择临时密码的路线,那么任何人都可以通过不断点击重置链接并输入该用户的电子邮件地址来骚扰该用户。如果您使用密码重置链接,则用户可以选择忽略它们并删除电子邮件。
对于普通公众来说,没有更好的方法。如果是内部应用程序,你可以考虑发送加密电子邮件,用户必须使用 PGP 解码,但除非你拥有一个非常高价值的利基产品,否则这种方法不适用于外部用户。
如果电子邮件不可用,你必须使用诸如安全问题之类的东西,但它们有自己的(在我看来更重要的)问题。其中包括:
有很多更安全的方法可以重置密码。所有这些方法都对用户非常不方便,而且维护成本也很高。让每个用户向您发送DNA样本和指纹,然后要求他们亲自出席进行验证,应该有助于提高安全性。我很惊讶您的顶级机构允许您在stackoverflow上获取安全建议。开玩笑的,你的应用程序需要多安全?攻击者真的会重置用户的密码,然后访问他们的电子邮件吗?
XKCD总是说得最好http://xkcd.com/538/