我想知道在用户提交5次错误登录尝试后处理阻止计算机的最佳方法。
我想通过IP做到这一点但后来我开始思考用户是通过网关来共享一个共同的IP。我不希望阻止有害用户,因为同一网络上的其他人输入的数据不正确。
Cookie是另一种选择,但用户可以从浏览器中清除它们,因此我认为它们效率很低。
其他人可以再给我一些想法吗?
谢谢Mic
答案 0 :(得分:2)
<?php
if ($login_not_successful) {
require_once 'HTTP/FloodControl.php';
try {
$ip = HTTP_FloodControl::getUserIP();
} catch (HTTP_FloodControl_Exception $e) {
die($e);
}
try {
$fc =& new HTTP_FloodControl();
$fc->setContainer('File', '/home/user1/logs');
$limits = array (
10 => 10, // maximum 10 requests in 10 seconds
60 => 30, // maximum 30 requests in 60 seconds
300 => 50, // maximum 50 requests in 300 seconds
3600 => 200 // maximum 200 requests in 3600 seconds
);
if (!$fc->check($limits, $ip)) {
die('Too many requests. Please try later.');
}
} catch (HTTP_FloodControl_Exception $e) {
die($e);
}
}
// Your login form
?>
答案 1 :(得分:1)
我会做类似的事情:
如果用户提交5次错误的登录尝试:
阻止用户登录15 [xxx]分钟(如果他也尝试密码是正确的,那么它将不起作用)
添加验证码控件,以便其他用户可以毫无问题地登录...
我会通过IP和用户名...
来做到这一点只需在数据库中保存上次错误尝试的时间戳,然后是错误尝试的增量值。
然后,如果他试图在确定的时间之前登记(让我们假设15分钟)从上次错误的尝试和
增量值低于最大登录尝试次数,只需使用新时间戳更新增量值+ 1和时间戳
增量值等于(或更高)您阻止登录尝试并使用新时间戳增加时间戳