登录尝试超时

时间:2015-07-02 13:39:17

标签: php

我有一个售票服务台,我将登录尝试限制为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;
    }

2 个答案:

答案 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

因此示例中的查询选择特定时间范围内的所有实例(可能,因为您记录了每个尝试日志的时间)。

相关问题