您要做的最后一件事是将所有不成功的登录尝试存储在数据库中,这将工作得很好,但也使得 DDOS 攻击使您的数据库服务器停机变得极其微不足道。
你可能在你的网络服务器上使用某种类型的服务器端缓存,memcached 或类似的。这些是用于通过 IP 地址和/或用户名跟踪失败尝试的完美系统。如果超过了登录尝试失败的某个阈值,您可以决定停用数据库中的帐户,但是您将为不需要的失败登录计数器保存一堆读取和写入到您的持久存储中坚持。
如果您试图阻止人们强制进行身份验证,那么像 Gumbo 建议的节流系统可能效果最好。它将使攻击者对蛮力攻击不感兴趣,同时在正常情况下甚至在攻击正在进行时最小化对合法用户的影响。我建议只计算 memcached 或类似中 IP 的不成功尝试,如果您成为极端分布式蛮力攻击的目标,您始终可以选择开始跟踪每个用户名的尝试,假设攻击者是实际上经常尝试相同的用户名。只要尝试不是非常分散的,因为仍然来自大量的 IP 地址,初始的 IP 代码应该可以很好地阻止攻击者。
防止来自 IP 地址数量有限的国家/地区的访问者出现问题的关键是不要让您的阈值过于严格;如果您在几秒钟内没有收到多次尝试,那么您可能不必担心重新。脚本暴力破解。如果您更关心人们试图手动解开其他用户的密码,您可以通过用户名为后续失败的登录尝试设置更广泛的界限。
另一个不能回答您的问题但有些相关的建议是对您的最终用户强制执行一定级别的密码安全性。我不会过分要求混合大小写、至少 x 个字符、非字典等密码,因为你不想在他们还没有注册的时候给他们带来太多麻烦,但是简单地阻止人们使用他们的用户名作为他们的密码应该可以在很长一段时间内保护您的服务和用户免受最简单的攻击——猜猜他们为什么称他们为蛮力;)——攻击。