Vos tutoriels

Protection du login avec session time

Bonjour,


Il existe plusieurs manière de se connecté a votre compte même si vous n'êtes pas le propriétaire, et l'une d'elle est l'attaque par force brute qui consiste a taper de mauvaise identifiant jusqu’à trouver le bon.


mais je vous rassure on peut s'en prémunir avec les session et time() bon en théorie parce que a la longue si il a la vie eternel le hacker pourra forcer le passage quand même, mais là vous pourrez vous prémunir en mettant par exemple une alerte avec un message en session qui vous alertera des fail répété mais en générale il n'y a pas plus faire car même si vous êtes prévenue il n'est pas dit que ça soit les identifiant de votre profil qui ont été testé.


Le but et de crée un compteur de fail et de l'incrémenté a chaque faux identifiant comme ceci - vous faite votre requête et ensuite :


$req = $db->prepare('SELECT * FROM users');
$req->execute(['username' => $username]);
$user = $req->fetch();

if($user == null){ //on check l'utilisateur si il existe avec les donnée du formulaire 
       if(empty($_SESSION['login_fail'])){ //si la session et vide
           $_SESSION['login_fail'] = 1; //one incrémente de 1
           $_SESSION['login_time'] = time()+ 60 * 3; // et ici aussi time()
       }else{
           $_SESSION['login_fail']++;
       }
       setFlash('Les données n\'existe pas ou votre compte n\'est pas actif','orange');
       redirect('login');

   }


Ensuite une fois un nombre de fail 5 sur l'exemple on envois un message flash et on redirige, tant que le temps d'attente n'est pas écoulé le formulaire redirigera toujours sans vérifier la base de données ce qui est bien pour évité les requête vous pourriez même mettre un sleep(2); de 2 seconde voir plus pour rendre fou le hacker.


if(!empty($_SESSION['login_time']) && $_SESSION['login_time'] < time()){ // on vide la session une fois le temps écoulé
   unset($_SESSION['login_fail']);
   unset($_SESSION['login_time']);
}
if(!empty($_SESSION['login_fail']) && $_SESSION['login_fail'] >= 5){ // si la session fail n'est pas vide on redirige
       $error = errors(['Vous avez entré de mauvais identifiants 10 fois de suite il vous faut attendre '. date('H\hi',$_SESSION['login_time']) .' pour réessayer']);
}


Voila c'est tout vous pouvez vérifiez les deux valeur identifiant plus mots de passe voir même le csrf en hidden pour vraiment tout bloquer mais c'est pas vraiment utilise puisque si vous avez bien fait validation de formulaire il sera obliger de rentré le pseudo et donc incrémenté le compteur de fail


Si vous êtes sur WAMP et normalement c'est pareil pour les autre serveur il faut mettre php.ini en heure local etc... date.timezone = Europe/Paris 


C'est finito vous pouvez reprendre une vie normale 👍

380 vues
03 juin 2022 à 12:12 (Édité)
Cette pub permet au site de vivre ...

Commentaire

Tu veux participer ?
Alors connecte toi ou inscris toi et viens participer !
Cette pub permet au site de vivre ...