安全的帐户注册



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

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

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

这意味着我试图在"密码恢复"部分不向攻击者泄露帐户存在信息是徒劳的,因为我在网站的注册部分泄露了相同的信息。

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

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

有人能给我指出这个问题的正确方向吗?

谨致问候,Daan


更新

在输入这篇文章几分钟后,我对如何不向攻击者泄露信息有了以下想法:

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

你觉得怎么样?

如果您进行密码恢复,请始终在电子邮件合法时发送电子邮件已发送的警报,但仅在他在您的数据库中时发送。在注册部分,需要说明电子邮件是否存在于数据库中,因此可能会泄露,但对于在不知情的情况下猜测电子邮件地址的人来说,他们需要勇敢面对,这可以通过限制用户可以做的帖子数量来避免,以防垃圾邮件

总是有可能使用登录名进行登录。您不需要您的电子邮件地址是唯一的,除非这是唯一的登录方法。

如果你真的想更安全的话,她的答案会更模糊。你可以拥有的:

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

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

我认为这个问题没有很好的答案。正如约阿希姆所指出的,当你要求电子邮件是唯一的时,你总是容易泄露。因为必须在注册时进行检查。无论您的数据库中是否存在电子邮件,只要始终显示"说明已发送到您提供的电子邮件"即可管理密码恢复。失败或成功都会在内部处理,但永远不会表现出来。使定时攻击成为不可能的最佳方法是将整个发送过程推迟到与HTTP响应异步。

因此,选择要么转移到登录名系统(表面上有相同的安全漏洞),要么接受在注册过程中泄露的唯一电子邮件地址。

这里可能没有最好的答案。安全性的一部分是让用户变得聪明。只注册一个不公开的电子邮件地址往往会有所帮助。但是,如果攻击者可以访问他们的注册电子邮件,那么事情就超出了你的控制范围。而且你能做的不多(除非你用SMS或其他东西进行两步身份验证)

相关内容

  • 没有找到相关文章

最新更新