1

这个问题本质上与语言无关,但就我而言,我正在为任何想知道的人使用PHP 。

我想跟踪用户登录尝试失败的次数,以便在X尝试失败后显示验证码。这样做的唯一目的是防止暴力攻击。它不一定是一种非常安全的方式,只要够烦人就可以延迟任何暴力破解的人。

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

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

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

4

2 回答 2

3

您最好将其记录在附加到用户 ID 的数据库中。这是因为坚定的攻击者不会使用网络浏览器进行暴力破解。用几乎任何语言构建一个脚本非常简单,该脚本会重复登录尝试并完全忽略 cookie,或者在每次尝试后重置 cookie。

于 2013-03-20T21:55:51.107 回答
0

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

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

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

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

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

于 2013-05-04T17:55:09.627 回答