Jump to content
  • Please do not post a message for the purpose of insulting, incitement to hatred, sexual remarks and any other which does not respect our terms of use !
Sign in to follow this  
Ubrain

 tutoriel Protéger son site contre les BrutForces

Recommended Posts

VIP

Bonjour HabboDev, 
Je viens faire un tutoriel sur une faille très courante sur les CMS, pour ma part je n'ai vu aucun CMS n'ayant d'anti brut-force au niveau de la connexion.
Voici une tutoriel complet pour éviter le brut-force, ce qui change des brut-force web que j'ai pu vous montrer il y a quelques mois, c'est que celui-ci enregistre les données sur le serveur et non pas les cookies qui peuvent s'éffacer très facilement, voir être bloqués pour passer cette sécurité.

Prérequis Base de données / Hébergement payant (l'hébergement gratuit peut provoquer des erreurs de stockage)
 

1. Un Brut Force, c'est quoi ?

 

Le brut Force est une faille permettant d'usurper l'identité d’autrui en entrant dans le formulaire des entrées aléatoires jusqu’à trouver les bons mots-de passe, ceci est fait par des robots.
Ces robots vont par exemple commencer par envoyer comme mot de passe "a", puis si le mot de passe n'est pas "a" il va essayer "b", puis "c".... jusqu’à arriver à "z" ou il va essayer les caractères spéciaux (#*$=°) puis les chiffres.
 

Citation

Et quand tous les caractères ont étés épuisés, que ce passe t-il ?

 

Je ne vous apprend rien si je vous dit que 99% des mots de passe font plus d'un caractère, si , si, je vous assure !
Donc par extension, un brut-force qui ne va pas au dessus d'un mot de passe d'un seul caractère ne sert pas à grand chose...
Donc quand le robot atteint le dernier caractère (par exemple 9) il va reprendre le premier caractère (a) puis reprendre le même procédé avec une seconde lettre (aa) puis (ab) puis (ac) et j'en passe,
Puis quand le second caractère arrive au dernier caractère, le premier caractère va changer (a -> b) donnant (ba) puis (bb) puis (bc)
Jusqu’à ce que les deux arrivent au dernier caractère utilisable, et bien un nouveau caractère va être ajouté et ce jusqu’à trouver le mot de passe !
 

Citation

Oui mais pour arriver à un mot de passe de 6 caractère il faudrait faire plus de 120984 entrées (oui j'ai calculé) et pour faire cela il faudrait prendre plusieurs jours, voir heures non ?

 

Ce sont des robots qui le font et vous savez la différence de rapidité entre un robot et un humain, le différence est telle que pour craquer ce mot de passe &é"'(- il ne faudra que deux minutes pour que ce mot de passe soit brut force, choquant, non ? Avant de paniquer et de vous dire que vos données bancaires vont être compromis ou autre, sachez que de nombreux sites ont d'anti brut-force !

Heureusement, trouver un brut-force de nos jours n'est pas un jeu d'enfant, je veux dire que par la il faut avoir de la chance pour tomber sur un anti brut-force sans virus...


 

2. Régler l'erreur avec les cookies, quel est le problème ?

 

J'avais il y a de cela quelques mois (en mai) fait un petit tutoriel pour régler les failles brut force sauf que j'ai utilisé la méthode des cookies.

Le nombre d'essais étaient stockés dans une variable $_COOKIE pour éviter un nombre trop important de connexion.


image.png.3efe7ab00ce773c31688ecd24c6e1318.png

 

Par exemple, ici, nous avons l'option de bloquer certains cookies, évitant que le site puisse stocker des variables dedans.
Il est simple de vérifier si le cookie à été bloqué mais cette manière ne reste quand même pas sécurisée.

Je pense que si une personne est capable d'utiliser un brut force, elle est aussi capable de supprimer un cookie.

 

3. Anti Brut-Force stocké dans le serveur

 

Pour ceci, nous allons relever l'IP et collecter le nombre d'essaies avant de bloquer au bout d'i=un certain nombre de tentatives.

J'ai même ajouté la colonne "Autorisation" si vous voulez autoriser un membre à passer le brut force.

 

Citation

Mais si on change l'IP, on pourra se reconnecter à nouveau.

 

C'est le risque, mais déjà cette sécurité bloque déjà une bonne partie des brut-force.
Et puis, rien ne vaut plus de sécurité ;) !
 

Citation

Télécharger le fichier SQL :


Vous pouvez le télécharger ici,
antibrutforce_ubrain.sql

 

Une fois le fichier mis sur votre base de données, passons à l'ajout de code sur votre site :
Pour commencer, vous devez trouver votre fichier permettant la connexion, pour vous aider, allez dans le fichier ou se trouve la barre de connexion (header, index) et trouvez la balise <form>,

Voici à quoi devrait ressembler approximativement la partie de code :

<form action="fichier.php" method="post">
  <input type="text" placeholder="Identifiant">
  <input type="password" placeholder="Mot de passe">
  <input type="submit" value="Envoyer">
</form>

Vous devez récupérer le contenu du paramètre "action" dans la balise <form> (ici, fichier.php)
Ouvrez votre fichier nommé selon le paramètre "action",
Et ajoutez en début du body,
Si il n'y a pas de Body, ajoutez ce code après la connexion PDO
 

<?php
// Récupération de l'IP du client
$ip = $_SERVER['REMOTE_ADDR'];

// Récupération des données de la table antibrutforce_ubrain
$sql = "SELECT * FROM antibrutforce_ubrain WHERE IP=\"$ip\"";

// Modifier $bdd par la variable de stockage de la base de données (voir pdo.php)
foreach ($bdd->query($sql) as $antibrutforce) {
}

// Vérification si le membre est autorisé ou non à avoir un nombre de tentatives élevé
if ($antibrutforce['Autorisation'] == 0) {
  // Vérification du nombre de tentatives, modifier 30 par le nombre de tentatives max autorisées
  if($antibrutforce['Essaies'] >= 30) {
    // Arret de l'exécution du script, vous pouvez insérer une redirection pour indiquer que le nombre maximum de tentatives à été atteint.
    exit;
  }
}
?>

Maintenant nous allons ajouter le code pour compter le nombre de tentatives maximum.

Pour cette partie, vous aurez besoin de petites compétences techniques, si vous n'y arrivez pas, envoyez-moi un pv, je vous guiderais.
Vous allez devoir trouver l'endroit dans la page où se situe la redirection en cas d'erreur lors de la connexion. 
Une fois cette partie de code trouvée, veuillez insérer ce code au dessus de la redirection sinon cela perd toute son utilité :) 
 

<?php
// Comme les données ont déjàs étés récupérés plus haut, aucun besoin de les récupérer à nouveau
try {
  // Calcul du nombre d'essais
  $essai = $antibrutforce['Essaies'] + 1;
  $sql = "UPDATE antibrutforce_ubrain SET Essaies=\"$essai\" WHERE IP=\"$ip\"";
  // Modifier $bdd par la varible de récupération des données PDO (voir pdo.php)
    $stmt = $bdd->prepare($sql);
    $stmt->execute();
    }
catch(PDOException $e)
    {
  // En cas d'erreur
  echo 'Une erreur inconnue à empeché l\'envoie au serveur, ERREUR : '.$e.'';
  // Arret de l'execution du script par sécurité.
  exit;
    }
?>

Maintenant, en cas de réussite, il faut vider le nombre d'essais et remettre les compteurs à zéro.

Cette fois-ci, vous allez devoir trouver l'endroit dans la page où se situe la redirection en cas de réussite lors de la connexion. 
Une fois cette partie de code trouvée, veuillez insérer ce code au dessus de la redirection sinon cela perd toute son utilité ;) 
 

<?php
try {
    // Remise à zéro des tentatives de connexion
$sql = "UPDATE antibrutforce_ubrain SET Essaies=0 WHERE IP=\"$ip\"";
    $stmt = $bd->prepare($sql);
    $stmt->execute();
    }
catch(PDOException $e)
    {
    }
?>


Merci d'avoir lu mon tutoriel, si vous avez besoin d'aide, n'hésitez pas !
N'oubliez pas le +1 si vous avez trouvé mon article intéressant car il à mis du temps à être réalisé et écrit :p 

 

Citation

Si vous voulez autoriser un membre à passer outre la sécurité, vous devez mettre Autorisation sur la valeur 1 dans l'entrée de son IP ;) 


 

 

Bonne journée à vous tous :) 

Edited by Ubrain

Share this post


Link to post
Share on other sites
Vétéran

Merci c'est super sympas de ta part de nous partager ça :)

Share this post


Link to post
Share on other sites
Resp modo

Très bon tutoriel très utile à la communauté

Ça servira à beaucoup 

Merci d'avoir pris le temps de rédiger ça ;) 

Share this post


Link to post
Share on other sites
VIP
Il y a 1 heure, Bloon a dit :

Merci à toi, bon tutoriel :).

 

il y a 37 minutes, Pancani a dit :

Très bon tutoriel très utile à la communauté

Ça servira à beaucoup 

Merci d'avoir pris le temps de rédiger ça ;) 

 

il y a une heure, TheJill a dit :

Merci c'est super sympas de ta part de nous partager ça :)

 

Merci :) 

Share this post


Link to post
Share on other sites
Vétéran

J'aurais pas procéder par 30 enregistrements des tentatives dans la bdd personnellement mais merci pour le partage :p 

Share this post


Link to post
Share on other sites

J'aime bien, sauf que calculer comme sa, c'est pas très rentable.

pour ma part, j'ai un anti brute-force mais il fait aussi l'anti robot, au passage.

pourquoi tu récupère pas les tentatives directement depuis les logs et compte le nombre de logs non réussie ?

et ainsi si par exemple dépasse: 5 fois le mauvais mot de passe sa te met un captcha.

et ainsi, mettre un time, en gros toute les 5 minutes exemple, sa enlève automatiquement le captcha.

donc le brute force inutile et aussi les robots (pub) avec.

et l'utilisateur pourras toujours se connecter. et le brute force / anti robot se enlève auto

 

merci quand même autrement = )

Share this post


Link to post
Share on other sites
VIP
il y a 2 minutes, Kurumi Tokisaki a dit :

J'aime bien, sauf que calculer comme sa, c'est pas très rentable.

pour ma part, j'ai un anti brute-force mais il fait aussi l'anti robot, au passage.

pourquoi tu récupère pas les tentatives directement depuis les logs et compte le nombre de logs non réussie ?

et ainsi si par exemple dépasse: 5 fois le mauvais mot de passe sa te met un captcha.

et ainsi, mettre un time, en gros toute les 5 minutes exemple, sa enlève automatiquement le captcha.

donc le brute force inutile et aussi les robots (pub) avec.

et l'utilisateur pourras toujours se connecter. et le brute force / anti robot se enlève auto

 

merci quand même autrement = )

 

Hey, oui c'est une bonne idée et je n'y avais pas directement pensé. Merci pour la remarque ;) 
Bonne fin de journée !

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...