我有登录页面,当然我希望防止暴力攻击,并在用户登录时减少延迟.
目前,您输入用户名和密码登录.
我正在考虑实施一个reCAPTCHA.但是,这显示在3次尝试失败后登录.
我的问题是:
你的尝试基础是什么?IP地址?它总是可以隐藏...用户名?如果他们尝试的用户不存在怎么办?
计算失败登录尝试的最佳方法是什么?
Sam*_*tch 49
会话不可靠,因为他们依赖cookie,CAPTCHAs经常被破坏[包括ReCAPTCHA].唯一可靠的方法看似简单:问一个问题.不要使用数学问题,因为计算机出于某种原因出人意料地善于解决这些问题.伟大的老备用品是这样的:
这是愚蠢的 - 易于实现,并且机器很难解决.
至于强制执行,请尝试在用户表中添加两个字段,'first_failed_login'[ INTEGER
unix timestamp or DATETIME
]和'failed_login_count'.[ INTEGER
]
<?php
$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
}
Run Code Online (Sandbox Code Playgroud)
这将使您的登录系统每10分钟仅识别每个用户3次登录尝试.