这个问题本质上是语言无关的,但在我的情况下,我使用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的高负载。