我想防止黑客侵入我的用户帐户。人们常说:
在登录尝试失败后,最好的方法是暂时锁定帐户。
我明白这一点,这似乎是个好主意。例如,使用IP是一个非常糟糕的想法--亚洲至少有一个国家的NAT‘’ed,所以IP不能用于任何事情。
不幸的是,封锁带来了一个真正的问题。它揭示的信息,无论帐户是否存在。我们不想这样做,这就是为什么我们总是写“电子邮件和密码不匹配”或类似的东西。
我不能锁定没有存在的帐户-否则我将不得不存储有关非现有帐户的信息与失败的登录尝试。然后,僵尸网络可能会在我的数据库中导致数十亿条记录--这些记录是不存在的账户。
处理这个问题的可能性是什么?为了防止暴力攻击,同时又不透露信息,是否存在一个账户?
发布于 2015-06-11 13:39:04
我的团队刚刚解决了同样的问题,考虑到最终我们的解决方案是多么的简单,要达到这个目标还有很长的路要走。
这里有很多需要考虑的因素,其中大部分你已经讨论过了。幸运的是,所有的DDoS/DoS都是由我们的IaaS提供商处理的,所以我们不必担心这些。我的第一个建议是,如果您没有使用这样的服务,我建议您这样做,正确地实现这些东西并不简单。
在为我们处理所有基础设施之后,这使我们能够专注于应用程序本身。然而,我们的第一本能是看一种锁定方法,然而,经过一些讨论,甚至只是简单地了解了它的工作方式、实现等,我们发现其中存在着许多潜在的缺陷(您提到的IP方法就是其中之一),我们决定放弃它。
然后我们问了一个问题:“我们到底想做什么?”,最终我们想要防止机器人和黑客的暴力攻击,但同时为真正的users....when维护一个良好的用户界面--我们真不敢相信它有多简单--使用验证码。
实现非常简单,在X失败之后,我们将Captcha添加到表单中,并强制用户与他们的凭据一起验证这一点。我们认为这给了我们在安全性和可用性之间的最佳平衡,因为:
发布于 2015-06-11 13:04:03
两点:
锁定帐户不会发出任何信号;它只意味着即使是正确的身份验证者也无法登录。您没有回答"OK,这是正确的密码,但您的帐户是锁定的,“您继续回答”不正确的名称/密码组合“像以前一样。真正的用户,使用真正的身份验证者,将等待10分钟的重置,或者打电话给服务台进行手动复位。蛮力攻击者将继续尝试其他密码。
假设远程攻击,在三个(或五个,或任何您认为合适的)不成功的名称/密码组合之后,删除连接。这是帐户是否存在,密码是否正确(和帐户锁定)或不正确。同样,对攻击者没有任何有用的信息,给健忘或易出错的授权用户带来了微小的不便(重新连接)。
https://stackoverflow.com/questions/30781010
复制相似问题