我注意到在某些网站上,当您请求密码提醒或登录时,他们会告诉您用户是否不存在(我认为Meetup会这样做)。其他网站只会说“用户/密码组合无效”(谷歌,我相信,这样做)。
是否存在不泄露用户ID存在的安全原因?
答案 0 :(得分:9)
是的。
您希望尽可能少地向攻击者提供信息
如果攻击者知道用户名,他们可以尝试攻击该用户的电子邮件帐户。例如,如果我知道您的登录名为chris@gmail.com
,我可以尝试进入您的Gmail帐户。他们还可以看到您可能注册的其他网站,并试图侵入这些网站(可能是网站作者没有正确保护他们的数据库),并窃取密码并尝试将此密码用于{{1在。
如果攻击者不知道有效用户名是什么,他们基本上必须破解密码:chris@gmail.com
长,这会增加破解帐户所需的时间。
答案 1 :(得分:3)
是:不要让任何密码生成机器人试图破解该帐户。
编辑: 另外我想,您无法联系他们并声称您的电子邮件帐户已被该用户帐户攻击并提供新的(假)地址。
答案 2 :(得分:2)
除了其他原因外,除了黑客攻击外,还可能存在隐私问题。有时 userid 可以与此人相关:当用户拥有在许多网站中使用的标准昵称时,或者当他使用完整和非常见名称时;或者更为关键的是,当用户标识对应于文档编号时 - 如某些电子银行网站所做的那样。免费提供这些信息(有效地告诉每个人“此用户ID在我的数据库中”)可能是一个严重的隐私问题。
答案 3 :(得分:2)
否,没有一个很好的安全理由。 有安全理由 - 只是不好的。
这里和其他地方一遍又一遍地给出了同样的答案:它为攻击者提供了额外的信息,你想尽可能少地给他们。这只对愚蠢的攻击者有效,而且他们不是你必须担心的。这个论点存在一个重大缺陷 - 无论是从理论上还是从实践角度来看。
通常可以通过其他方式检查用户名 (实用)
电子邮件的例子特别具有讽刺意味,因为电子邮件地址的全部内容是将其提供给其他人,以便他们可以通过电子邮件发送给您。电子邮件地址不是秘密。 (当然,您不希望提供存在的地址列表,但是说出给定地址是否存在则是另一回事。)
在电子邮件以外的情况下,您通常可以通过尝试注册用户名来检查用户名。如果用户名已经存在,系统别无选择,只能告诉你!即使它尝试对它腼腆并且给你一个通用错误,一半大脑的攻击者仍然可以解决它,而普通用户会因为无法注册和离开而感到恼火。 / p>
用户名不是秘密 (理论)
在安全性中,定义什么是秘密,什么不是秘密是很重要的。如果人们认为用户名是秘密的并且这不是问题 - 他们有安全幻觉,这比没有安全性更糟糕。用户需要明确这一点:密码是秘密的,用户名不是。即使您不知道获取用户名的任何方法,也不能依赖可能拥有您密码的人不会拥有您的用户名。如果您的密码被泄露,那就完全了。
由于用户名通常不是真正的秘密(毕竟它标识用户),它可能变成“半秘密”:通常 显示的东西,但如果你足够努力。人们常常会认为两个“半秘密”是秘密 - 但事实并非如此。当然,他们没有用这些术语来考虑它。相反,他们会认为“如果我有一个简单的PIN码就不会那么糟糕,因为没有我的银行卡,没有人可以使用它”并且单独认为“如果我丢失我的银行卡就不会那么糟糕,因为如果没有PIN,没有人可以使用它无论如何”。
即使用户名 是秘密,也无法提高安全性。为什么不?因为你现在只有两个密码。两个密码不“纵深防御” - 它只是一个密码,它被分成两部分(其中一部分很容易妥协)。它的效率不如仅仅使密码长两倍(或复杂的两倍)。
答案 4 :(得分:0)
它为攻击者提供了一个需要找到的东西。这是一个简单的要求,但是任何有充分理由的人应该知道的事情,但不一定是那些不应该在那里的人知道的。
答案 5 :(得分:0)
作为一般经验法则,请不要向攻击者提供绝对必要的信息。如果有人输入了不在您系统中的电子邮件地址,您不必告诉他们该电子邮件是否存在,所以不要。
肯定有更强的防御形式,但对于“纵深防守”,每一件小事都会加起来。