我已经设置了数据库记录每次登录尝试失败的情况。我想将失败尝试的次数乘以0.05秒或其他时间。就像这样:
time_nanosleep(0, (50000000 * $failed_attempts ) );
黑客尝试猜测密码的次数越多,每次检查所需的时间就越长。在检查100个密码后,他必须在每次尝试之间等待5秒。
这是防止暴力破解的好方法吗?我通过IP识别用户。所以我想你可以使用多个代理服务器之类的方式来进行暴力破解,但除此之外,我认为这是一个好主意。你们觉得呢?
我已经设置了数据库记录每次登录尝试失败的情况。我想将失败尝试的次数乘以0.05秒或其他时间。就像这样:
time_nanosleep(0, (50000000 * $failed_attempts ) );
黑客尝试猜测密码的次数越多,每次检查所需的时间就越长。在检查100个密码后,他必须在每次尝试之间等待5秒。
这是防止暴力破解的好方法吗?我通过IP识别用户。所以我想你可以使用多个代理服务器之类的方式来进行暴力破解,但除此之外,我认为这是一个好主意。你们觉得呢?
你觉得这样怎么样:
time_nanosleep(0, (10000000000 * (log($failed_attempts)^10)) );
我首先发现的问题是,你在处理的机器人并不在意回复之间是否有延迟。除非你采取措施限制此行为,否则你可能会使用大量系统资源,并出现潜在的非常长的延迟。在 5 次尝试失败后,只需禁止该 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();
}
}
这不应该是你对抗暴力破解的全部策略,但它是该策略的一个很好的组成部分,我认为几乎总是应该使用。
限制IP重试次数并使用验证码。不要过载服务器,保持简单。
我知道我在某个地方看过这样的做法,但我忘记了是在哪里。我看到的例子是,每次尝试失败后,将时间延迟加倍。如果你从0.1秒开始,一个普通用户可能会输错密码一两次,导致延迟增加到0.4秒。他们甚至不会注意到。但是,试图进行暴力攻击的人很快就会遇到几分钟或几小时的延迟。
我想对于Web应用程序来说,可能存在自己发起拒绝服务攻击的问题。这完全取决于系统如何处理时间延迟。
机器人并不在乎你的延迟,无论是指数还是对数或其他任何形式。你使用的任何延迟都可以通过轮询来克服。因此,不要考虑延迟。考虑限制尝试次数并使用Google reCAPTCHA。它使用公钥加密和私钥解密。适用于消除大多数机器人,并且更难破解。