我有一个售票服务台,我将登录尝试限制为10.经过10次,用户无法再次登录!我想为登录尝试尝试设置超时。
因此,如果有人尝试登录并且错误了10次,则无法再从该IP或该用户名登录5或10分钟。我有一个config.php
文件,我有这个:
define('LOGIN_TRIES',10);
//and in my login.php page i have this:
//limit login tries.
if (isset ( $_SESSION['hit'] ) ) {
$_SESSION['hit'] += 1;
if ($_SESSION['hit'] > LOGIN_TRIES){
echo "<p><i class='fa fa-lock fa-2x pull-left'></i>Access Locked.</p>";
include("includes/footer.php");
exit;
}
}else{
$_SESSION['hit'] = 0;
}
答案 0 :(得分:1)
当然你可以改进这段代码,但基本的逻辑是在用户被锁定时设置时间戳,然后检查锁定是否超时。
如果是,请将hit
重置为0
if (isset ( $_SESSION['hit'] ) ) {
/* If user is locked check for timeout, set to 10min */
if( isset($_SESSION['locked_time']) &&
($_SESSION['locked_time']+600 ) <= time()) ){
$_SESSION['hit'] = 0;
unset($_SESSION['locked_time']);
}
$_SESSION['hit'] += 1;
if ($_SESSION['hit'] > LOGIN_TRIES){
$_SESSION['locked_time'] = time(); // set last locked time here
echo "<p><i class='fa fa-lock fa-2x pull-left'></i>Access Locked.</p>";
include("includes/footer.php");
exit;
}
}
else{
$_SESSION['hit'] = 0;
}
答案 1 :(得分:0)
你正在抵御暴力攻击。我发现以下链接很有用。使用数据库表记录登录尝试及其时间,用户名或电子邮件地址,以及在您的情况下,IP地址(不在下面的链接示例中执行)。
参见第3节 - 暴力功能 http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL
因此示例中的查询选择特定时间范围内的所有实例(可能,因为您记录了每个尝试日志的时间)。