我正在编写一个Web应用程序,安全性对我来说非常重要。在写下忘记密码时#39;功能我考虑了以下建议:
但这让我思考。该网站要求用户电子邮件地址是唯一的。因此,当电子邮件已存在时,注册表格会通知用户。
这意味着我尝试不在“密码恢复”中将帐户存在信息泄露给攻击者。部分是无用的,因为我在网站的注册部分泄漏了相同的信息。
我一直在寻找防止这种方法和最佳实践的方法,但没有太多关于它的信息。
我在stackoverflow帐户系统中也注意到了同样的问题。 Stackoverflow不会在“忘记密码”中泄露此信息。功能,但它确实泄漏注册过程中的帐户存在信息。
有人能指出我在这个方向上正确的方向吗?
亲切的问候, 大安
输入后几分钟我就如何不向攻击者泄露信息提出了以下想法:
您怎么看?
答案 0 :(得分:1)
如果您进行密码恢复,请始终发送电子邮件合法时已发送电子邮件的警报,但仅在他在您的数据库中时发送。 在注册部分,它需要说明数据库中是否存在电子邮件,因此泄漏是可能的,但是人们在不知道电子邮件地址的情况下猜测电子邮件地址,他们需要暴力破解它,这可以通过限制用户可以采取的措施来防止发送垃圾邮件
答案 1 :(得分:0)
总是有可能转向登录名登录。除非这是登录的唯一方法,否则您不需要您的电子邮件地址是唯一的。
如果你真的想要更加安全,那么她的回答会更加模糊。你能拥有什么:
这可能会让猜测登录名更加困难,而且会更安全一些。电子邮件地址不一定必须是唯一的。但是,用户必须始终跟踪他们注册的登录名。此过程可能表面上隐藏了攻击者的这些信息。由于登录和密码恢复都只会要求用户名。
我不认为这个问题有很好的答案。就像Joachim指出的那样,当您要求电子邮件是唯一的时,您总是容易泄漏。由于必须在注册时进行检查。只需始终发送消息即可管理密码恢复"已将指示发送到您提供的电子邮件"电子邮件是否存在于您的数据库中。失败或成功将在内部处理,但永远不会显示。无法进行定时攻击的最佳方法是将整个发送过程推迟到HTTP响应中。
所以选项要么是,移动到登录名系统(表面上具有相同的安全漏洞),要么只接受使用唯一的电子邮件地址,您将在注册过程中泄漏。
这里可能没有最好的答案。安全性的一部分是让用户变得聪明。只使用一个不公开的电子邮件地址注册,往往会有所帮助。但是,如果攻击者可以访问他们的注册电子邮件,那么事情是您无法控制的。你可以做的事情并不多(除非你有两步用短信或其他东西)