关于通过应用限制来防止暴力破解 Web 服务的密码,SO 有几个有用的答案。但我找不到任何好的数字,而且我在这方面缺乏专业知识,所以问题是:
通常需要多少次尝试才能暴力破解 6 个或更多字符的平均密码(没有可能有帮助的其他知识,但考虑到密码可能容易受到字典攻击),并基于此,有意义的限制是什么在不影响用户体验的情况下应用节流算法?
这是我目前的计划:
- 登录表单使用随机数,因此攻击者必须等待完整的请求周期完成才能获取登录尝试的结果并检索新令牌。
I allow the login form to be retrieved 50 times per IP with less than a minute between requests, after that the IP will be blocked for 1 minute. Any new attempts within this one minute will restart the timeout.
There's a sleep
applied for each fetching of the login page of # of attempts / 5
, so after 5 requests with less than a minute between requests it'll take > 1 second to fetch the form, after 10 requests > 2 seconds, etc.
Additionally, I'm only allowing 100 failed login attempts per user account with 2 hours between attempts, after that the account is blocked for 2 hours.
- 为了避免频繁对帐户进行 DoS'ing,可以将 IP 列入白名单(无限制)或黑名单(完全忽略任何登录尝试)。
根据到目前为止的答案,我已将其调整为如下工作:
- 检索登录表单的速度会根据每个 IP 逐渐变慢。每个新请求都会被休眠
# of requests / 2
秒。 10 分钟无登录活动后,计数器将重置。
- 我为每个 IP 保留登录尝试的 FIFO 堆栈。如果一个IP在2小时内登录失败30次,则该IP被暂停。我还保留了每个 IP 的暂停次数列表,暂停时间的计算方式为
2 ^ (# of suspensions + 1) hours
。这应该会导致不断违规的 IP 迅速被列入事实上的黑名单。
- 此外,如果一个帐户在一天内登录失败 20 次,该帐户将被暂停 2 小时。我还不太确定这项措施,因为这意味着帐户很容易受到 DoS 攻击。不过,如果没有大规模的分布式僵尸网络,违规 IP 被列入事实上的黑名单的速度应该比帐户被永久拒绝服务的速度还要快。这也是保护帐户的一种非常有效的措施。
我认为这些限制不应伤害普通用户,即使是那些经常忘记密码并尝试多次登录的用户。考虑到服务的平均大小,IP 限制也应该适用于经过大量 NAT 处理的用户。有人可以通过一些扎实的数学来证明这是有效还是低效吗? :)
你有一些很好的控制,但你真的应该加强它。普通用户登录失败的次数不应超过五次。如果他这样做,请向他显示验证码。
请记住,在任何情况下都不应锁定帐户。这称为帐户锁定漏洞。这允许任意用户从服务中注销其他用户(DOS,拒绝服务)。
我已经多次解决过登录限制问题,我喜欢的是在数据库中创建一个包含失败尝试和上次失败尝试日期的字段。每当某人(任何人)无法登录帐户 X 时,您就会增加 X 失败尝试的值并更新上次失败尝试的日期。如果失败的尝试计数超过 Y(例如,五次),则显示特定用户的验证码。因此,您不会有一个巨大的被禁止 IP 数据库来限制登录表单,而是每个用户只有两个字段。由于僵尸网络和代理(合法和非法)的存在,基于 IP 的禁止/限制也没有什么意义。当 IPv6 流行起来时,我想你会更加失败。根据目标帐户进行限制更有意义。因此,当您的帐户 X 成为僵尸网络的目标时,登录表单将受到验证码的限制。这里明显的缺点是,如果您的验证码失败……您的登录限制也会失败。
所以,本质上它是这样的:
- 有人未能登录帐户 X - 增加失败尝试字段。
- 如果失败尝试超过5次,并且最后一次失败尝试发生在一小时前,则该帐户似乎受到攻击,请显示验证码。
- 另一方面,如果最后一次失败的尝试发生在一天多前,则攻击似乎已经结束,降低您的护盾并且不需要验证码。
它基本上是一个盾牌,当针对特定帐户的大规模有针对性的攻击时,它就会打开。这种方法的好处是,即使我在世界各地拥有一个 PC 群也没关系 - 我无法暴力破解单个帐户,因为它是基于帐户的。
这样做的两个坏处是,如果验证码失败,您将一无所有。当然,您也可以通过设置其他保护措施来改善这种情况。第二个问题是,如果我有一个僵尸网络,我可以为每个帐户使用一台电脑,然后很可能在一百万台计算机网络中我至少破解了一个帐户,但这种方法仅适用于非目标攻击。
我希望这能给你一些想法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)