跟踪失败的登录尝试

时间:2013-03-20 21:53:00

标签: php security session passwords brute-force

这个问题基本上与语言无关,但就我而言,我正在为想要了解的人使用PHP

我想跟踪用户登录尝试失败的次数,以便在X次尝试失败后显示CAPTCHA。这可能是唯一的一个例子就是防止蛮力攻击。它不一定是一种非常安全的方式,只是非常烦人,无法推迟任何蛮力行为。

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

PHP或MySQL应该接受用户输入并对其进行加密。

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

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

如果您的服务器在发布请求中最多可以获取8 Mb数据,该怎么办?该攻击者可以发布1 Mb作为密码,尝试在加密时使用DDOS以保持服务器的CPU处于高负载状态。