会议是不可靠的,因为他们依靠cookies,CAPTCHA经常被破坏[包括ReCAPTCHA]。唯一可靠的方法是欺骗性的简单:提出一个问题。不要使用数学问题,因为计算机出于某些原因令人惊奇地擅长解决这些问题。伟大的老同志是这样的:
> this page第六段第四个字是什么?
>这个网站作者的名字是什么? [hint]
这很容易实现,而且机器很难解决。
至于fore-forcing,请尝试向用户表添加两个字段’first_failed_login'[INTEGER unix timestamp或DATETIME]和’failed_login_count’。 [整数]
$bad_login_limit = 3;
$lockout_time = 600;
$first_failed_login, failed_login_count; // retrieve from DB
if(
($failed_login_count >= $bad_login_limit)
&&
(time() - $first_failed_login < $lockout_time)
) {
echo "You are currently locked out.";
exit; // or return, or whatever.
} else if( /* login is invalid */ ) {
if( time() - $first_failed_login > $lockout_time ) {
// first unsuccessful login since $lockout_time on the last one expired
$first_failed_login = time(); // commit to DB
$failed_login_count = 1; // commit to db
} else {
$failed_login_count++; // commit to db.
}
exit; // or return, or whatever.
} else {
// user is not currently locked out, and the login is valid.
// do stuff
}
这将使您的登录系统每10分钟仅识别每个用户的3次登录尝试次数。