如何在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分钟?
答案 0 :(得分:4)
将以下两列添加到您的行中:
在你的登录逻辑中,检查这两个值,如果它是3或更多,并在时间范围内(例如:10分钟),然后更新last_attempt并增加attempt_count,这个第二部分不是必需的,但你可能想要要知道这一点。如果超过10分钟,则将attempt_count设置为0,如果它们通过则设置为1,如果失败则设置为1,并再次更新last_attempt。
作为奖励,您现在也知道用户上次登录的时间,这在您想要查找未使用的帐户时非常有用。
答案 1 :(得分:0)
有很多方法可以做到这一点。如果你想阻止设备然后你可以创建一个10分钟的cookie,并设置一个条件,如果用户名匹配,那么它将不会命中数据库进行登录。
或者,如果您要阻止该用户的任何设备,则必须保持用户状态,其中三次连续失败尝试将更改用户状态和阻止它的时间。但是这次你要检查阻塞时间是否在10分钟之前,或者不是每次登录尝试。