如何在3次登录尝试后阻止用户?

时间:2016-11-02 19:46:56

标签: php mysql session login controller

如何在3次登录尝试后阻止用户?

这是我的代码:

session_start();

        /************Connexion************/

    if(isset($_POST['cnx'])){
    require_once('../config.php');
    $db = new DBSTOCK();
    $cnx = $db->connect();
    $user=$_POST['user'];
    $pass=$_POST['pass'];
    // To protect from MySQL injection for Security purpose
    $user = strip_tags($user);
    $pass = strip_tags($pass);

    $user = stripslashes($user);
    $pass = stripslashes($pass);

    $user = mysqli_real_escape_string($cnx,$user);
    $pass = mysqli_real_escape_string($cnx,$pass);

    $q=mysqli_query($cnx,"select * from admin where user='".$user."'");

    $row = mysqli_fetch_array($q); //or die(mysqli_error($con));
    $pw = $row['pass'];//hashed password in database
    $username = $row['user'];


    if($user==$username && password_verify($pass, $pw)) {
    $_SESSION["user"]=$user;
    header("Location: ../view/accueil.php");
    }
    else{
    header("Location: ../index.php?failed=0");
    }}


        /************Deconnexion************/

         if(isset($_GET['decnx'])){

         session_destroy();
         session_unset();

         header("Location: ../index.php");
    }

我可以添加到我的代码中的任何脚本建议,以便在连续3次登录尝试失败后,用户可以被阻止10分钟?

2 个答案:

答案 0 :(得分:4)

将以下两列添加到您的行中:

  • last_attempt as datetime
  • attempt_count as int

在你的登录逻辑中,检查这两个值,如果它是3或更多,并在时间范围内(例如:10分钟),然后更新last_attempt并增加attempt_count,这个第二部分不是必需的,但你可能想要要知道这一点。如果超过10分钟,则将attempt_count设置为0,如果它们通过则设置为1,如果失败则设置为1,并再次更新last_attempt。

作为奖励,您现在也知道用户上次登录的时间,这在您想要查找未使用的帐户时非常有用。

答案 1 :(得分:0)

有很多方法可以做到这一点。如果你想阻止设备然后你可以创建一个10分钟的cookie,并设置一个条件,如果用户名匹配,那么它将不会命中数据库进行登录。

或者,如果您要阻止该用户的任何设备,则必须保持用户状态,其中三次连续失败尝试将更改用户状态和阻止它的时间。但是这次你要检查阻塞时间是否在10分钟之前,或者不是每次登录尝试。