tentativi limitati di accesso e blocco di un account utente per una quantità specifica di tempo

buon giorno ho un problema con la creazione di tentativi di accesso che bloccherà un account esistente dal login se l’utente ha inserito i dettagli errati per 5 tentativi ho un ajax e un database per esso

Ho provato a fare un tentativo per tentativi che ha un valore di 0. quindi ogni errore dà + 1 ma non ne aggiungerà più di uno perché penso che il comando ajax lo aggiorni di nuovo in modo che i tentativi ricevano solo un ciclo.

la parte di login funziona ma non riesco a far funzionare i tentativi e hai qualche idea su come bloccare l’utente se i tentativi sono maggiori di 5 per 15 minuti ho cercato un codice per questo ma è stato usato l’ultima volta nel 2007 così alcuni il codice non può essere letto da php

ecco il mio codice Ajax:

sulla pagina di accesso ecco il codice Ajax:

>  function validLogin(){ > var uname=$('#uname').val(); > var password=$('#password').val(); var attempts=0; > > var dataString = 'uname='+ uname + '&password='+ password; > $("#flash").show(); > $("#flash").fadeIn(400).html(''); > $.ajax({ > type: "POST", > url: "login_processed.php", > data: dataString, > cache: false, > success: function(result){ > var result=trim(result); > $("#flash").hide(); > if(result=='correct0'){ > window.location='user_home.php'; > } > else if(result=='correct1'){ > window.location='admin_home.php'; > }else{ > $("#errorMessage").html(result); > $attempts++; > } > > } > }); } function trim(str){ > var str=str.replace(/^\s+|\s+$/,''); > return str; }  

ed ecco il codice login_process.php per l’elaborazione del login dove cattura i risultati e gli errori.

 > $message=array(); $attempts=0; if(isset($_POST['uname']) && > !empty($_POST['uname'])){ > $uname=mysql_real_escape_string($_POST['uname']); }else{ > $message[]='Please enter username'; } > > if(isset($_POST['password']) && !empty($_POST['password'])){ > $password=mysql_real_escape_string($_POST['password']); }else{ > $message[]='Please enter password'; } > > $countError=count($message); > > if($countError > 0){ > $attempts++; echo $attempts; for($i=0;$i echo ucwords($message[$i]).'
'; > > } > > } > > > else{ > $query="select * from user where uname='$uname' and BINARY password='$password'"; > > $res=mysql_query($query); > $checkUser=mysql_num_rows($res); $row = mysql_fetch_assoc($res); > if($checkUser > 0){ > $_SESSION['LOGIN_STATUS']=true; > $_SESSION['UNAME']=$uname; > echo 'correct'.$row['type']; > }else{ > echo ucwords('Incorrect Username or Password'); > > } }

Qualsiasi aiuto sarebbe molto apprezzato. e mi puoi insegnare per i tentativi di accesso che bloccano l’utente perché se blocco l’IP di un utente che ha tentativi sbagliati può influenzare ampiamente il luogo in cui una persona accede per esempio ad un negozio di computer. : D grazie

1. Si dovrebbe creare una tabella DB chiamata tentativi o qualcosa del genere. quindi metti i tuoi id utente dalla tabella utente che hai già inserito.

  1. Quindi, ogni volta che qualcuno tenta di accedere, il codice recupera il numero di tentativi correnti e ne aggiunge 1, quindi aggiorna la tabella.

  2. Quindi scrivi una dichiarazione che se i tentativi per un singolo account sono maggiori di 5, visualizza un messaggio che informa l’utente che non possono accedere.

Utilizzare una variabile di sessione per impostare la funzionalità di timeout e blocco.

come questo

  session_start(); $attempts = "your MySQL result from the attempts table"; if($attempts < 5){ //normal login with error message $next_attempts = $attempts++; //code to write $new_attempts to attempts table //set the start of the lockout timer if($attempts == 4){ $_SESSION('timeout') = time(); } } //LOCKED OUT CODE else{ echo "sorry you have to wait 15 min to log in again"; //Check elapsed time //10 minute timeout if ($_SESSION['timeout'] + 10 * 60 < time()) { $attempts = 0; //code to write $attempts to table attempts session_destroy() } }