[PHP] [TUTO] Anti Brute Force

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

SonGoku

Je suis Légendaire
V
Ancien staff
Mar 27, 2011
6,131
75
954
Alpha
Bonjour à tous !

Voici aujourd'hui un Tuto ( assez simple ) pour vous proposer d'empêcher des personnes malveillantes d'essayer de casser les mots de passe de votre site internet, en utilisant la méthode du Brute Force.

Donc voilà comment faire ?
Identifier l'ordinateur qui essaye de se logger
Vérifier si il a déjà rentré plusieurs mdp faux
En fonction du résultat lui autoriser ou non l'accés

Dans le tuto il y aura la présence d'un système
de login il ne sera pas expliqué ici car il n'y en a pas grande utilité je vous signale juste qu'il utilise mysql

Le code

Tout d'abord il vous faudra créer une table mysql. Elle doit contenir les champs user(en texte), timestamp(en
bigint(20)) et pour finir tentative(en decimal(10,0)).


Ensuite, il faut connaître la personne qui essaye de se logger. Nous allons utiliser les fonctions:

gethostbyaddr => donne le DNS de l'adresse ip.
REMOTE_ADDR => Avoir l'ip de l'utilisateur


1458660523-screen1.png


Voilà maintenant on sait qui a essayé de se connecter

1458660592-screen2.png


Vous devriez en être à ce point là :) .

Bilan => utilisateur identifié et recherché dans la bdd.

Ensuite nous allons essayer de nous logger.

1458660617-screen3.png

Voilà on a essayé de se logger. Aller on va dire que nous sommes malveillants et que nous avons utilisé un
système de brute force pour essayer de nous logger. Bien sûr le mot de passe, à moins d'une chance inimaginable ne
sera pas bon( une chance sur 2.4815578026752E+014 pour un mot de passe à 8 caractères alphanumérique).​

Que va-t-il se passer maintenant ?​

S'il y a eu plus de 1 minute depuis les 5 erreurs on remet la valeur de tentative à 0.​

1458662603-okok.png

S'il n'y a jamais eu d'erreur alors on crée les valeurs dans la table de la bdd.​

1458662676-okokok.png


Et s'il y a déjà eu une tentative on augmente la valeur de 1.

1458662803-tentativeok-1.png


Maintenant rappelez vous, nous avions dit plus haut
Citation : plus haut

// Si les tentatives de login sont inférieures à 5 (même si la valeur et 4 au départ le champ 'tentative' n'a
pas de valeur dans la bdd).​

Mais si elles sont égales à X (où X est le nombre de tentatives) ?

Il y a 2 solutions : soit ça fait plus de 60 secondes que les tentatives ont été faites et alors on supprime l'utilisateur
de la bdd de brute force​

1458660711-screen6.png

Si non, s'il y a eu plus de 5 tentatives en 60 secondes alors bah là c'est à vous de voir soit vous pouvez bannir
l'utilisateur, soit vous pouvez laisser couler le mec va se casser les dents car il ne pourra faire que 5 tentatives
toutes les 60 secondes ce qui sera extrêmement long et donc je pense qu'il finira par abandonner​

Corriger

Voilà je vous ait expliqué pas à pas le code donc je pense qu'il ne devrai pas avoir de problème
Voilà quand même tout le code .​

1458660990-screen7.png

1458660990-screen7-2.png

Et voilà !!

Cordialement

SonGoku


sources : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
 

Evaelis

La Voix de la Sagesse
V
Ancien staff
Apr 28, 2010
22,949
468
1,699
Valhalla
mysql_connect est supprimé sur les dernières versions de PHP, check du cote de la class PDO ou de mysqli.
Ensuite rarement tu brutes force sans proxy mais l'idée reste intéressante.
Escape le HOST (Change X-Forwarded-For header in between each request. The IP we submit through this header will be passed to gethostbyaddr()), ce serait con de prendre une injection.
 

SonGoku

Je suis Légendaire
V
Ancien staff
Mar 27, 2011
6,131
75
954
Alpha
mysql_connect est supprimé sur les dernières versions de PHP, check du cote de la class PDO ou de mysqli.
Ensuite rarement tu brutes force sans proxy mais l'idée reste intéressante.
Escape le HOST (Change X-Forwarded-For header in between each request. The IP we submit through this header will be passed to gethostbyaddr()), ce serait con de prendre une injection.

Disons qu'un débutant qui veut brute force, ça va le ralentir :) Après c'est sur qu'un expérimenté, ça va le faire rire.
 

Evaelis

La Voix de la Sagesse
V
Ancien staff
Apr 28, 2010
22,949
468
1,699
Valhalla

Evaelis

La Voix de la Sagesse
V
Ancien staff
Apr 28, 2010
22,949
468
1,699
Valhalla
D'ailleurs maintenant qu'on en reparle, cette faille est vraiment dangereuse kappa
 

w8ing

Membre
Sep 5, 2010
5
0
561
35
Dans le cas d'une tentative de bruteforce il est plus intéressant de stocker tout ça sous forme de fichier, ça évite les requêtes inutiles pouvant saturer le serveur et c'est beaucoup plus rapide.
 

Zealey

Nouveau Marchand
May 23, 2019
30
1
219
24
Discord
Zealey#5080
Ceci est toujours d'actualité ? Je sais que l'injection SQL l'ai toujours mais vous pensez que ça marcherait à protéger contre les injections sql ?