Comment limiter les tentatives de connexion en utilisant PHP et MySQL

Posted on


Dans ce didacticiel, nous apprendrons comment limiter la tentative de connexion à l’aide de PHP et MySQL.

Structure des fichiers et tables de base de données utilisées dans ce didacticiel:

Deux tables MySQL utilisées:

  • loginlogs (ce tableau stocke l’adresse IP de connexion de l’utilisateur et le temps de tentative de connexion)
  • utilisateur (le tableau des utilisateurs stocke les informations de connexion de l’utilisateur, c’est-à-dire le nom d’utilisateur et le mot de passe)

Fichiers PHP utilisés dans ces tutoriels:

  • config.php (fichier de connexion à la base de données)
  • index.php (utilisateur pour la connexion et vérification de la connexion utilisateur tentée)
  • dashboard.php (Après une connexion réussie, l’utilisateur redirigera vers cette page)
  • logout.php (Ce fichier de déconnexion / destruction de session utilisateur)

loginlogs Structure de la table MySQL:

CREATE TABLE `loginlogs` (
`id` int(11) NOT NULL,
`IpAddress` varbinary(16) NOT NULL,
`TryTime` bigint(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

structure de la table MySQL utilisateur:

CREATE TABLE `user` (
`id` int(11) NOT NULL,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

config.php: Ce fichier est utilisé pour la connexion à la base de données.


index.php: Il s'agit du fichier principal utilisé pour la connexion et la vérification de la tentative de connexion. Nous allons d'abord créer un HTML forme avec deux champs: nom d'utilisateur et mot de passe.

 


Créez maintenant une fonction pour l'adresse IP

function getIpAddr(){
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
$ipAddr=$_SERVER['HTTP_CLIENT_IP'];
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ipAddr=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ipAddr=$_SERVER['REMOTE_ADDR'];
}
return $ipAddr;
}

Nous allons stocker l'adresse IP dans une variable et créer également une variable pour le temps.

$time=time()-30; // Here you can chnage the attempt lock time. We using 30 here because after 3 failed login attempt, user can't login for 30 second.
$ip_address=getIpAddr(); // Stroing IP address in a variable.

Après cela, nous obtiendrons le nombre de tentatives de connexion sur la base de l'adresse IP et du temps d'essai.

$query=mysqli_query($con,"select count(*) as total_count from loginlogs where TryTime > $time and IpAddress='$ip_address'");
$check_login_row=mysqli_fetch_assoc($query);
$total_count=$check_login_row['total_count'];

Si le nombre de tentatives de connexion est égal à 3 (vous pouvez modifier la tentative de connexion en fonction de vos besoins), il affichera le message d'erreur «À de nombreuses tentatives de connexion échouées. Veuillez vous connecter après 30 secondes ».

Si le nombre de tentatives de connexion n'est pas égal à 3, il vérifiera les informations de connexion fournies par l'utilisateur, puis correspondra à l'enregistrement de la base de données. Si l'enregistrement correspond, l'utilisateur redirigera vers dashboard.php sinon le programme vérifiera la tentative de connexion restante. Si une tentative de connexion restante est 0, elle affichera le message d'erreur «À de nombreuses tentatives de connexion échouées. Veuillez vous connecter après 30 secondes »sinon il affichera« Veuillez saisir des informations de connexion valides.
$ rem_attm tentatives restantes ».

// Vérification si la tentative 3, ou vous pouvez définir le non de la tenter. Pour l'instant, nous ne prenons que 3 tentatives infructueuses
if ($ total_count == 3) {
$ msg = "À de nombreuses tentatives de connexion ayant échoué. Veuillez vous connecter après 30 secondes";
}autre{
// Obtention des valeurs de publication
$ username = $ _ POST['username'];
$ mot de passe = md5 ($ _ POST['password']);
// Codage pour la connexion
$ res = mysqli_query ($ con, "select * from user where username = '$ username' and password = '$ password'");
if (mysqli_num_rows ($ res)) {
$ _SESSION['IS_LOGIN']= 'oui';
mysqli_query ($ con, "supprimer des journaux de connexion où IpAddress = '$ ip_address'");

écho "";

}autre{
$ total_count ++;
$ rem_attm = 3- $ total_count;
if ($ rem_attm == 0) {
$ msg = "À de nombreuses tentatives de connexion ayant échoué. Veuillez vous connecter après 30 secondes";
}autre{
$ msg = "Veuillez saisir des informations de connexion valides.
$ rem_attm tentatives restantes "; } $ try_time = time (); mysqli_query ($ con, "insérer dans les valeurs de loginlogs (IpAddress, TryTime) ('$ ip_address', '$ try_time')"); } }

Voici le code complet que nous avons écrit pour la page index.php:

    $ time et IpAddress = '$ ip_address' ");
$ check_login_row = mysqli_fetch_assoc ($ requête);
$ total_count = $ check_login_row['total_count'];
// Vérification si la tentative 3, ou vous pouvez définir le non de la tenter. Pour l'instant, nous ne prenons que 3 tentatives infructueuses
if ($ total_count == 3) {
$ msg = "À de nombreuses tentatives de connexion ayant échoué. Veuillez vous connecter après 30 secondes";
}autre{
// Obtention des valeurs de publication
$ username = $ _ POST['username'];
$ mot de passe = md5 ($ _ POST['password']);
// Codage pour la connexion
$ res = mysqli_query ($ con, "select * from user where username = '$ username' and password = '$ password'");
if (mysqli_num_rows ($ res)) {
$ _SESSION['IS_LOGIN']= 'oui';
mysqli_query ($ con, "supprimer des journaux de connexion où IpAddress = '$ ip_address'");
écho "";
}autre{
$ total_count ++;
$ rem_attm = 3- $ total_count;
if ($ rem_attm == 0) {
$ msg = "À de nombreuses tentatives de connexion ayant échoué. Veuillez vous connecter après 30 secondes";
}autre{
$ msg = "Veuillez saisir des informations de connexion valides.
$ rem_attm tentatives restantes "; } $ try_time = time (); mysqli_query ($ con, "insérer dans les valeurs de loginlogs (IpAddress, TryTime) ('$ ip_address', '$ try_time')"); }} } // Obtenir l'adresse IP fonction getIpAddr () { if (! empty ($ _ SERVER['HTTP_CLIENT_IP'])) { $ ipAddr = $ _ SERVER['HTTP_CLIENT_IP']; } elseif (! empty ($ _ SERVER['HTTP_X_FORWARDED_FOR'])) { $ ipAddr = $ _ SERVER['HTTP_X_FORWARDED_FOR']; }autre{ $ ipAddr = $ _ SERVER['REMOTE_ADDR']; } return $ ipAddr; } ?> Formulaire de connexion

Formulaire de connexion



dashboard.php

Après une connexion réussie, l'utilisateur redirigera vers cette page. Cette page valide avec le session si la session est vide, l'utilisateur redirigera vers la page index.php.



    || 
Se déconnecter

logout.php: Cette page sert à détruire le session.


Voir la démo —————————————————————————

Nom d'utilisateur: administrateur
Mot de passe: Test @ 123

Télécharger le code source complet (limite de tentative de connexion à l'aide de PHP et MySQL)

Taille: 5 KB

Version: V 1.0


Tutoriels recommandés pour vous




Telecharger ici

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *