安全帐户注册

时间:2015-06-29 10:04:55

标签: php security passwords

我正在编写一个Web应用程序,安全性对我来说非常重要。在写下忘记密码时#39;功能我考虑了以下建议:

  • 生成安全随机身份验证令牌
  • 向用户发送包含此令牌的电子邮件
  • 向用户发送带有密码的短信,以便与电子邮件链接一起输入
  • 不要泄露帐户信息,当用户输入未知地址时,网站不会提及未知的电子邮件地址。这样,帐户无法链接到webapp。

但这让我思考。该网站要求用户电子邮件地址是唯一的。因此,当电子邮件已存在时,注册表格会通知用户。

这意味着我尝试不在“密码恢复”中将帐户存在信息泄露给攻击者。部分是无用的,因为我在网站的注册部分泄漏了相同的信息。

我一直在寻找防止这种方法和最佳实践的方法,但没有太多关于它的信息。

我在stackoverflow帐户系统中也注意到了同样的问题。 Stackoverflow不会在“忘记密码”中泄露此信息。功能,但它确实泄漏注册过程中的帐户存在信息。

有人能指出我在这个方向上正确的方向吗?

亲切的问候, 大安

更新

输入后几分钟我就如何不向攻击者泄露信息提出了以下想法:

  • 不要向新用户显示邮件'电子邮件地址正在使用',但接受注册就好像它是新的一样。
  • 当电子邮件地址已经存在时,只需发送一封邮件,邮件中已有该电子邮件地址的帐户。

您怎么看?

2 个答案:

答案 0 :(得分:1)

如果您进行密码恢复,请始终发送电子邮件合法时已发送电子邮件的警报,但仅在他在您的数据库中时发送。 在注册部分,它需要说明数据库中是否存在电子邮件,因此泄漏是可能的,但是人们在不知道电子邮件地址的情况下猜测电子邮件地址,他们需要暴力破解它,这可以通过限制用户可以采取的措施来防止发送垃圾邮件

答案 1 :(得分:0)

总是有可能转向登录名登录。除非这是登录的唯一方法,否则您不需要您的电子邮件地址是唯一的。

如果你真的想要更加安全,那么她的回答会更加模糊。你能拥有什么:

  • 登录名(登录Web应用程序的实际唯一标识符必须是唯一的)
  • 显示名称(其他用户可见的名称,不必是唯一的)

这可能会让猜测登录名更加困难,而且会更安全一些。电子邮件地址不一定必须是唯一的。但是,用户必须始终跟踪他们注册的登录名。此过程可能表面上隐藏了攻击者的这些信息。由于登录和密码恢复都只会要求用户名。

我不认为这个问题有很好的答案。就像Joachim指出的那样,当您要求电子邮件是唯一的时,您总是容易泄漏。由于必须在注册时进行检查。只需始终发送消息即可管理密码恢复"已将指示发送到您提供的电子邮件"电子邮件是否存在于您的数据库中。失败或成功将在内部处理,但永远不会显示。无法进行定时攻击的最佳方法是将整个发送过程推迟到HTTP响应中。

所以选项要么是,移动到登录名系统(表面上具有相同的安全漏洞),要么只接受使用唯一的电子邮件地址,您将在注册过程中泄漏。

这里可能没有最好的答案。安全性的一部分是让用户变得聪明。只使用一个不公开的电子邮件地址注册,往往会有所帮助。但是,如果攻击者可以访问他们的注册电子邮件,那么事情是您无法控制的。你可以做的事情并不多(除非你有两步用短信或其他东西)