我已经设置了DB来记录所有失败的登录尝试。我以为我会以0.05秒或其他方式将失败尝试的数量乘以。就像是:

            time_nanosleep(0, (50000000 * $failed_attempts ) ); 

黑客用来猜测密码的更多尝试,每次检查需要更多时间。在检查了100张柱子后,他必须在每次尝试之间等待5秒钟。

这是停止蛮力的好方法吗?我通过IP标识用户。因此,我想您可以通过使用多个代理服务器或其他内容来实现应用程序,但除此之外,我认为是一个好主意。你们有什么感想?

有帮助吗?

解决方案

那这样的事情呢:

time_nanosleep(0, (10000000000 * (log($failed_attempts)^10)) ); 

这将为您带来指数增长的尝试窗口。

其他提示

我看到的第一个问题是您正在处理一个不在乎响应之间是否延迟的机器人。除非您采取某些操作来限制这一点,否则您将使用可能很长的延迟的系统资源。仅在5次失败尝试后禁止IP。如果您担心禁止真正的用户,这可能是一个临时禁令。

限制通过IP重试,并使用验证码。不要超载服务器,想想亲吻。

您应该尝试不使用Sleep(),因为它使用CPU周期,如果您从10,000 IP地址发生了蛮力攻击,您将分叉10,000 Sleep()儿童过程或线程,这将导致服务器上的负载。

而是尝试使用PHP阻止IP地址。这样的东西。

function block_ip($ip) {
        $deny = array("$ip");
                if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
                    header("HTTP/1.1 403 Forbidden");
                    exit();
                }
            }

这不应该是您反对蛮力的整个策略,但这是该策略的绝佳组成部分,而IMO几乎应该始终使用。

您可能想呈指数级的时间,而不是线性地增加时间;或使其修复,例如5尝试失败后拒绝一个小时。

我知道我已经在某个地方看到了这一点,尽管我忘了在哪里。我看到的示例,他们在每次失败的尝试时将时间延迟增加一倍。如果您从.1秒开始,则可能是一个普通用户,他可能会误认为他的密码一次或两次,延迟为0.4秒。他们甚至都不会注意到。但是,试图蛮力的人迅速攻击了他的几分钟或几个小时的延误。

我想对于Web应用程序,可能会出现对自己发动拒绝服务攻击的问题。这完全取决于系统如何处理时间延迟。

机器人并不真正关心您的延迟,无论是指数级还是对数或任何东西。您使用的任何延迟都可以通过轮询来克服。因此,不要认为延迟。考虑限制尝试的数量并使用Google Recaptcha。它使用公私密钥加密。消除大多数机器人的工作,很难破解。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top