有几个有用的答案使有关预防暴力破解密码的网服务由施加限制。我找不到任何好处的数字,虽然我有点在这一领域的专门知识,因此问题是:

如何许多尝试,它通常采取暴力的平均密码6个或更多的字符的(没有额外的知识,可以帮助,但考虑到密码可能是容易的字典的攻击)和在此基础上,什么是有意义的限制适用于限制算法而不破坏的用户经验?

这是我目前的方案:

  • 登录的形式使用现时,使攻击者已等待一个完整周期的请求完成两个得到的结果在登录尝试和检索一种新标记。
  • 我允许登录的形式可以检索的50次每知识产权与不到一分钟的时间的请求,之后,知识产权将阻止的1分钟。任何新的尝试,在这一分钟内将重新启动超时。
  • 还有一个 sleep 适用于每一个获取的登录网页 # of attempts / 5, 以后5的请求,与不到一分钟的时间要求,它将采取>1第二获取的形式之后,10个请求>2秒,等等。
  • 此外,我仅允许100登录尝试失败的每个用户账户有2小时之间的尝试,之后,该帐户被封锁2小时。
  • 为了避免频繁DoS清的账户,IPs可以列入白名单(没有施加限制),或列入黑名单的(任何登录尝试被完全忽略).

基于答案迄今为止,我已经调整了它的工作这样的:

  • 检索的登录的形式逐渐缓慢下来每个IP的基础。每一个新的请求是睡了 # of requests / 2 几秒钟内。反复位10分钟后没有登录的活动。
  • 我保持一FIFO叠的登录尝试的每个知识产权。如果IP未登录在30次2小时内,它的暂停。我还保持一个列表中的数悬浮液每IP,中止时间计算为 2 ^ (# of suspensions + 1) hours.这应该导致迅速实现事实上黑名单的不断侵犯IPs。
  • 此外,如果一个账户登录失败20的时候在一天之内就被暂停2小时。我不太确定这种措施还没有,因为这意味着客户可以DoS会很容易。短短的一个巨大的分布僵尸网络虽然,犯罪IPs应该成为事实上的被列入黑名单的速度比一个帐户可以是永久DoS。它也是一个相当有效的措施来保护一个帐户。

我认为,这些限制不应当损害正常的用户,即使那些经常忘记自己的密码和登录在好几倍。IP限制也应当作好与重NAT'ed用户,给出的平均规模的服务。有人可以证明这是有效的或效率低下与某些实体的数学?:)

有帮助吗?

解决方案

从这个问题听起来像是最快的,他们可能尝试的密码是50每分钟。根据,并使用随机的6位数的密码:

  • 所有下情况:26^6=308,915,776可能的密码= 最糟糕的是12岁, 6年平均
  • 较低的情况和数字:36^6= 82年max, 有41年平均

当然,典攻击将以更快,但我没有数字。

编辑:我试图链接谷歌计算结果支持这个,但是 ^ 似乎搞砸了链接。

EDIT2:

字典攻击(从 http://www.outpost9.com/files/WordLists.html):

  • 所有列出的用词(75,000个): -1天
  • 列表816共用密码: ~16分钟
  • 真的长字列表中: -12天 (我看着这个我猜它包含了大部分的非技术人的密码)

最后一个是可怕的,但是,12天仍然是一个很长的时间。如果你真的担心,你可以跟踪每一个密码不正确,一直到用户得到一个正确的密码,那么如果列表中得到超过100不同的尝试,只是禁止的IP地址和发送电子邮件给用户。

其他提示

你有几个良好的控制,在那里,但你真的应该加强它更多。普通用户不应该失败登在超过五倍。如果他不给他验证码。

请记住,在任何情况下都不应锁账户。这就是所谓的一个帐户锁定脆弱性。此允许任意的用户登录了其他用户的服务(DOS,拒绝服务)。

我已经接近这个问题的限制登录多次和一个我喜欢的是你创建的一个领域的失败的尝试和最后一次失败的尝试日期在你的数据库。每当有人(任何)未登录入帐户X,你增加的价值X的失败的尝试和更新的最后一次尝试失败的日期。如果失败的尝试计数超过Y(例如,五),则显示一个验证的特定用户。所以,你将不会有一个庞大的数据库的禁止IPs门登录的形式,而不是你只有两个领域的每用户。它也是毫无意义的禁令/油门基于Ip地址,因的僵尸网络和代理(合法和非法的)。当IPv6出来的时尚,你会更加注定我猜.它使更多的意义上油门根据有针对性的帐户。所以,当你的帐户X是针对通过一个僵尸网络,登录的形式将会限制有一个验证码。显而易见的缺点是,如果你的验证码的失败...所以没有你登录的限制。

因此,在本质上它是这样的:

  • 有人未登录入帐户X增加的尝试失败的领域。
  • 如果有超过5次失败的尝试和最后失败的尝试,发生了一个小时前,这看来,该帐户下的攻击,表明验证码。
  • 另一方面,如果最后一个失败的尝试,发生多于一天前,似乎攻击已经结束,下你的盾牌,并且不要求验证码。

它基本上是一个盾牌,把在当有一个大规模的有针对性的攻击特别账户。的好事对这种做法是,它不会的问题,如果我自己一个农场的电脑世界各地的-我不能强迫一个单一账户,因为它的帐户为基础的。

两个糟糕的事情是,如果验证码的失败,你什么都没有留下。当然,你可以改善这种情况通过把其他保护措施,也是。第二个问题是,如果我有一个僵尸网络,我可以使用一台电脑每一个帐户,然后很可能有一百万计算机网络我裂的至少一个帐户,但这种方法只能在非有针对性的攻击。

我希望这个给你一些想法。

我通常喜欢@塔的答案,但更喜欢一个变体,没有使用验证码,主要是因为我恨它,作为用户的经验。

除了他的失败跟踪领域,还添加了一个闭锁场上有时间戳。我同意,锁定用户永远(或手册,直到重置)使糟糕的经历,但是 锁定了一个帐户,一个小时(虽然温和痛苦)是一种有效的威慑力量.

改变就是那时失败计数增加超过阈值,锁定领域设定为 now + 1 hour.每当授权正在执行,它看起来在这个领域并且如果 lockout > now, 然后它失败。

手动锁定的帐户,从一个行政管理的透然后变成只是一个问题设置的闭锁领域的一些遥远的未来价值等 9223372036854775807l (max64位签订了长)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top