在登录时显示用户名/帐户不存在的消息是否不安全?

信息安全 验证 账户安全 用户枚举
2021-08-26 06:41:38

根据OWASP Auth Guidelines,“无论用户 ID 或密码是否不正确,应用程序都应以通用错误消息进行响应。它也不应指示现有帐户的状态。”

但是,我发现许多流行的网络应用程序通过显示该帐户不存在的消息而违反了该准则。


谷歌


微软


松弛


那么这里发生了什么?谷歌、微软和 Slack 是否在做一些不安全的事情,或者 OWASP 指南没用?

4个回答

这是安全性和可用性之间的考虑,因此这里没有真正的正确答案。所以这里遵循我的意见。

如果您可以将用户名保密,请这样做。在这种情况下,无法确定用户名是否存在,无论用户是否存在,登录都会做出相同的反应。请注意,这也意味着要花费相同的时间来返回错误消息。

这种行为可能是不可能的。例如,如果用户可以注册自己并选择自己的用户名,则当系统中已经存在用户名时,您必须通知他们。如果是这种情况,请通过提供最详细的错误消息使登录尽可能易于使用。如果有人可以使用注册功能确定用户是否存在,那么在登录时隐藏它是没有用的。

这不是唯一没有被大玩家遵循的 OWASP 指南。OWASP 经常关注安全性而忽略可用性。如果结合合适的密码策略、蛮力保护(锁定、验证码、..)、MFA、监控失败的登录尝试等,它可能是一个有效的设计选择。

考虑到用户枚举不仅仅是能够猜测用户帐户的问题,您可以稍后对其进行暴力验证。一些网站应保护其用户的隐私(成人、政党、约会……)。如果我想检查我的老板是否在使用成人网站,我可以滥用用户枚举漏洞来了解他正在使用哪些网站。

你只是无法阻止它。(除非你准备好牺牲大量的可用性。)

用户枚举可能是不可取的,并且确实存在潜在的安全隐患(例如,如果攻击者发现有一个名为admin的有效帐户,他们可能会尝试访问该帐户)。但对于大型网站,这是您无法阻止的事情。

即使您在登录时没有透露用户不存在,您最终也必须在新用户尝试注册已使用的名称或使用已使用的电子邮件地址时警告他们。

没有用户友好的方法来解决这个问题:

创建您的 Google 帐户

安全是相对的。不提供有关帐户是否存在的信息会稍微安全一些。但这并不意味着提供这些信息是不安全的。它只是不太安全,而且只是非常轻微。

在您给出的示例中尤其如此;还有其他方法可以找到帐户名称,因此尝试隐藏帐户是否存在没有任何好处。

与任何形式的匿名安全一样,隐藏帐户名称是一种较弱的安全控制,需要其他控制。