跟踪失败的登录尝试


Keeping track of failed login attempts

这个问题本质上是语言无关的,但在我的情况下,我使用PHP为任何人想知道。

我想跟踪用户失败的登录尝试次数,以便在X失败尝试后显示CAPTCHA。这样做的唯一目的是防止暴力攻击。它不需要是一种非常安全的方式,只要让暴力破解的人感到厌烦就可以了。

我正在考虑创建一个会话变量$_SESSION['failedLoginAttempts'],并在每次检测到失败的登录尝试时增加它。攻击者仍然可以更换浏览器或删除他的cookie来继续进行攻击,但这会使他(即他使用的任何工具来执行暴力破解)在每次尝试中多浪费几秒钟,因此尝试的次数将大大降低。

从每秒几次攻击到每分钟几次攻击将是理想的,然后攻击将可以忽略不计。

这种方法是正确的还是我错过了什么?另外,在这些情况下的最佳实践是什么?

最好将此记录在用户ID附带的数据库中。这是因为一个坚定的攻击者不会使用web浏览器进行暴力破解;用大多数语言构建脚本非常简单,可以重复尝试登录并完全忽略cookie,或者在每次尝试后重置cookie。

还请记住,如果您将密码加密存储在数据库中。

PHP或MySQL应该接受用户输入并加密。

例如(非真实且不安全的代码)

$query = "SELECT * FROM user WHERE user = " . $_POST['username'] . " AND password " . sha512($_POST['password']);

如果您的服务器可以在post请求中接收多达8mb的数据该怎么办?攻击者可以发布1mb的密码,试图对加密进行DDOS攻击,以保持服务器CPU的高负载。