在我的网站上,我有一个密码重置页面,用户可以使用,如果他们已经忘记了他们的密码。在这个页面上,他们可以输入他们的用户名或电子邮件地址,并点击“重置”,这将向他们发送一个链接,以重置他们的密码。
如果他们输入了一个不正确的用户名或电子邮件,我应该让他们知道它不存在于我们的系统,或这是一个安全风险?
发布于 2014-07-11 13:52:36
答案通常是视情况而定。这实际上是基于您系统的安全性。
如果是这样的话,不告诉他们是毫无意义的。你不能有交叉的用户名或电子邮件地址,所以你必须通知一个新用户,如果他们的用户名或电子邮件已经被使用。然后,攻击者将能够通过攻击新的用户注册系统获得用户名和电子邮件。在“忘记密码”部分给他们一个类似的攻击地点并不会损害您的安全性,因为该方法只存在于其他地方。只需确保您在注册系统中使用的限制与请求密码的限制相同(即您使用的反垃圾邮件系统)。
考虑只邀请系统。你被允许注册的唯一方式是如果有人授权的话。这可能是管理员设置初始用户名、电子邮件和密码的实例(可能是手动设置)。此系统将允许您通过不告诉用户输入的信息是否正确而获得安全性。这样,用户名和电子邮件就可以被视为一个戒备森严的秘密。
请注意,这是对可用性的一次打击。如果有人输入错误的电子邮件地址,他们可能不会注意到他们做了。来自网站的电子邮件并不总是会立即通过,所以用户可能会等待一封从未收到过的邮件。
发布于 2014-07-11 19:59:19
有一个古老的传统,就是不区分“那个用户名不存在”和“那个用户名存在但密码是错误的”。它来自于过去的时代,当时攻击者和防守者都是新手,情况也不同。当时,攻击者“在外面”,他想猜测一个username+password对,以便进入主机。当时,密码比现在还要穷,人们认为保密用户名会有很大帮助(“攻击者永远不会猜到我们有一个名为'smith‘的用户!")。
一个有趣的阅读是这种对1988年“莫里斯”蠕虫的描述。这只野兽摧毁了整个互联网(它比现在要小),因为所有的蠕虫都消耗了大量的带宽,它们疯狂地在无控制的情况下复制。蠕虫可以通过各种方法进入系统,其中之一是密码破解。有趣的是,蠕虫首先从各种来源收集帐户名,包括".forward“文件,然后(然后)尝试一个432个单词的字典。这说明了两点:
时代变了。特别是,正如其他人所指出的,许多现代系统允许自动注册:任何人都可以尝试登录,并亲自查看给定帐户名是否“免费”。许多其他目标系统允许收集帐户名(例如,Web论坛可以使用贡献者的伪名称作为帐户名)。这使得对用户名保密的依赖比以往任何时候都要脆弱。另一方面,人们可能希望普通用户现在选择更强的密码(否则就太令人沮丧了)。净效果是平衡的改变:保守账户名秘密的传统已经失去了它的大部分相关性。
然而,传统是强大的力量。如果您的系统返回错误“那个用户名不存在”和“您的密码不正确”的另一条消息,那么很可能有些用户会感到紧张和反感,并且会抱怨您在向全世界透露Joe的名字时不负责任。您可能会争论并提供合理的理由来说明为什么这不是一个问题(见上文);有些人仍然不相信。当用户是客户时,这不是一件好事;而且,无论如何,这会消耗太多的时间。保持旧的传统更容易,即使它没有实际意义;你可以把它看作是应对人类用户基本不理性的一种方式。
发布于 2014-07-11 12:02:02
不,如果用户名不存在,您不应该让他们知道,因为它会让攻击者发现他们可以试图破解的帐户名。如果您发送了一个通用的“重置电子邮件已经发送,请检查您的收件箱。”即使帐户不存在,攻击者也不会从尝试中获得任何好处。
https://security.stackexchange.com/questions/62937
复制相似问题