当用户输入错误的密码时,哪个错误消息更好?

Posted

技术标签:

【中文标题】当用户输入错误的密码时,哪个错误消息更好?【英文标题】:Which error message is better when users entered a wrong password? 【发布时间】:2013-02-02 01:07:51 【问题描述】:

当用户输入错误密码时,从安全角度来看,以下两条错误消息有什么区别吗?

用户名或密码错误。

密码错误。

例如,当你在Gmail.com上输入错误的密码时,它会告诉你“你输入的用户名或密码不正确”。

出于安全原因是否有任何考虑?我认为错误消息:“您输入的密码不正确”对用户来说更清楚,而且,很容易检查Gmail.com上是否存在用户名:只需单击“无法访问您的帐户” ?”并输入用户名。如果用户名不存在,它会告诉你。

【问题讨论】:

我敢肯定,如果您尝试“无法访问您的帐户”的技巧几千次,它很快就会被注意到。 【参考方案1】:

我们的想法是不向黑客提供额外信息。如果您输入错误的密码,您就告诉黑客他们有正确的用户名,反之亦然。尽管您所说的是真实的,但在某些网站上,可以确定您是否通过其他方式猜到了用户名。

【讨论】:

请注意,大多数网站实际上仍然会告诉黑客他们在注册页面上是否有正确的电子邮件/用户名。因此,您最好告诉用户电子邮件/用户名是否正确,以提供更好的用户体验。【参考方案2】:

最简单和最常用的短语是:

“您输入的用户名或密码无效”

这样做的原因是为了防止有人试图通过“猜测”密码来暴力破解您的帐户。如果攻击者收到详细说明密码不正确的错误,那么他们可以尝试不同的密码直到正确为止。

但是,如果您提供类似上述的通用消息,攻击者不知道用户、密码或两者的组合是否正确。

法比奥 @fcerullo

【讨论】:

难道没有更好的方法来防止“猜测”密码吗?限制登录尝试、使用 reCAPTCHA 等提供了更加用户友好的方法来减轻这些攻击。 “用户友好”是指更好的用户体验。 @SupremeDolphin - 是的,但不值得冒险。原因之一:人们倾向于在多个站点上使用相同的用户名和密码。如果攻击者知道这是一个有效的用户名,他们可能会在他们已经入侵的站点上尝试它。另一个原因:在使用电子邮件作为用户名的网站上,最好不要让攻击者知道他们正在变热。太多的电子邮件列表浮动。第三个理由:不鼓励黑客。如果他们没有从您的网站获得任何信息,他们可能会转到其他网站。 编辑 我刚刚看到你的回答重新注册页面。好点子,【参考方案3】:

只是添加一些额外的信息。 OWASP 指南为您提供有关此问题的建议

https://owasp.org/www-project-cheat-sheets/cheatsheets/Authentication_Cheat_Sheet.html#Authentication_and_Error_Messages

不管怎样,应用程序都应该以通用错误消息进行响应 用户 ID 或密码是否错误。它也应该给 没有指示现有帐户的状态。

【讨论】:

【参考方案4】:

嗯,从不同的角度来看,在安全方面,这两条消息并没有太大的不同。至少对于允许注册的网站。黑客可以随时进入注册页面并尝试使用上述详细信息进行注册。当然,您的网站最初是由模糊性保护的,它会立即大喊“该用户名已被占用!”或“该电子邮件已注册!”到那时,安全性似乎是一个神话。

【讨论】:

通过使用电子邮件地址作为用户名并在尝试注册后始终发送电子邮件来缓解此问题。这样一来,尝试注册的简单行为就不会泄露电子邮件地址是否正在使用中。 @ChathanDriehuys 这种技术只是试图通过隐蔽来保护应用程序。它不仅违反了 UX 约定(与用户进行清晰的沟通),而且会导致发送大量不必要的电子邮件。请注意,一些开发人员使用付费订阅来发送电子邮件,可能是为了避免电子邮件进入垃圾邮件或其他原因。此外,在成功注册后以确认或帐户激活电子邮件的形式发送电子邮件是标准的,或者只是作为欢迎消息。发送注册尝试电子邮件至少可以说是令人困惑的。 我同意你的观点,用户体验因这个过程而变得复杂,但这是一种相当标准的做法。比如OWASP推荐的:cheatsheetseries.owasp.org/cheatsheets/… @ChathanDriehuys 确实被 OWASP 广泛使用和推荐。但这并不是一个好的做法。您是否注意到“大男孩”正在远离这种做法?谷歌和 Adob​​e 等公司甚至将其提高了一个档次。他们要求您输入电子邮件地址才能登录。只有当邮箱被注册后,您才能输入您的密码。这种做法是否会降低他们的登录过程的安全性?有更好的方法来防止暴力猜测,例如限制登录尝试、使用 reCAPTCHA 等。 “这会导致发送大量不必要的电子邮件” 嗯?在过程结束时,您没有说是否成功,您说下一步是检查您的电子邮件以确认注册。任何具有“忘记密码”机制的网站都存在完全相同的问题,任何人输入别人的电子邮件都会导致电子邮件被发送……我看不出有任何方法可以避免这种情况,直到我们有一些替代的身份验证机制。 【参考方案5】:

怎么样

凭证无效。请重试。

【讨论】:

【参考方案6】:

在某些情况下,您不希望攻击者能够猜测帐户的存在。因此,您将始终返回一般错误消息,以便攻击者无法猜测此帐户是否存在。

在 GMAIL 上下文中,可能是 gmail 不希望人们挖掘现有电子邮件地址以供垃圾邮件机器人使用。

您自己可以决定是否需要在您的应用程序中强制执行安全性,或者您是否可以提供更多用户友好的错误消息。

【讨论】:

以上是关于当用户输入错误的密码时,哪个错误消息更好?的主要内容,如果未能解决你的问题,请参考以下文章

c-string用户输入为空时如何发送错误消息?

输入错误的用户名和/或密码后,如何将用户从登录控件重定向到错误页面?

while练习

JWT:如何在密码或用户名错误 Django REST 上实现我的自定义错误消息

编写一个jsp程序,实现用户登录,当用户输入的用户或密码错误时,将页面重定向到错误提示也,并在该页面显示30秒后 自动回到用户登录界面

如何使用 GraphQLError 自定义消息?