Limiter les tentatives de connexion à un accès sécurisé php

darkjukka

WRInaute impliqué
Bonjour,

Voila, j'aimerai limiter les tentatives de connexion à une page sécurisée en PHP à 3 et bannir l'ip si les 3 tentatives ont échouées.

Actuellement j'utilise ce code pour me connecter :

Code:
<?php
session_start();

if(!isset($_SESSION['ident'])) {
$_SESSION['ident'] = false ;
}

$db_link = @mysql_connect($host,$login,$pass);
mysql_select_db($base);

if(isset($_GET)) {
foreach($_GET as $k => $v) {
$_GET[$k] = trim(htmlspecialchars($v)) ;
}
}

$login_ent = htmlentities($_POST['login']) ;
$pass_crypt_ent = htmlentities(md5($_POST['pass']));

if($login_news == "$login_ent" && $pass_news == "$pass_crypt_ent") {
$_SESSION['ident'] = true ;
}

if($_SESSION['ident'] == false) {
//Affichage du formulaire de connexion
}elseif($_SESSION['ident'] == true) {
//Affichage de la page sécurisée}

?>

Pouvez vous m'aidez à faire cela ? Je n'ai rien trouvé sur le net.

Merci :)
 

enky

WRInaute occasionnel
C'est que tu n'a pas assez cherché ;)

Bon pour faire simple fait une table dans laquelle tu enregistre l'ip le nombre de tentative et l'heure de la dernière tentative.

tu logue chaque tentative et quand tu arrive à 3 en moins de x minute tu bann dans ton script.
 

darkjukka

WRInaute impliqué
J'ai peut être mal cherché alors oui (ou pas avec les bon termes)

Aurais-tu un lien vers un tuto qui m'aiderait ? Je ne suis vraiment pas capable de monter ça comme ça sans aide.
 

darkjukka

WRInaute impliqué
Merci pour ce script très complet mais je n'arrive pas à le faire fonctionner :?
Je pense me tourner vers une autre solution, refuser l'envoie du formulaire si le temps d'affichage de la page est inférieur à 10 secondes, je cherche comment faire sur le net pour le moment.
 

Leonick

WRInaute accro
il te suffit de créer une variable de session qui contient le microtime, lors de l'affichage de la page, et ensuite de comparer avec le microtime lors de la réception du formulaire
 

Bool

WRInaute passionné
Via les sessions ça sous entend que le "robot" qui fera le brute force accepte les cookies :D
 

Bool

WRInaute passionné
Pour un brut force, on en a pas besoin : on soumet le formulaire, et on regarde si le formulaire de connexion est encore affiché.
Dans le bout code ci dessus, ça passe parfaitement.
 

darkjukka

WRInaute impliqué
J'ai au final opté pour la dernière solution qui a été la plus simple vu mon niveau de PHP :D

J'ai changé le système de connexion en utilisant un sur le site de Koogar (très bon site d'ailleurs, j'y vais souvent chercher quelques bouts de code :)), qui me permet de renvoyer une erreur si le pass ou le login n'est pas bon.
Dans ce cas "j'endors" le script 30 secondes avec la fonction sleep () ce qui limite à deux tentatives max par minutes (au lieu de 10aines voir 100aines à la secondes) et je m'envoie un mail avec l'IP du bonhomme (ou bien robot) que je pourrais bannir et les login et pass qu'il a testé, à quelle heure, etc ...

D'ailleurs il faut obligatoirement accepter les cookies sur son navigateur pour entrer dans l'espace protégé.
 

Bool

WRInaute passionné
Le sleep() il faut le mettre dans tous les cas... sinon quand le robot voit qu'il n'a pas de réponse sous 1 seconde (voir moins), il considère que le pass est faux et retente avec un autre pass.

Sans oublier qu'il peut également ouvrir plusieurs connexions simultanément.


A mon avis pour ce genre de formulaire il est préférable de mettre un sleep d'une seconde, mais valable dans tous les cas, y compris lorsque le mot de passe est valide.
Mais du coup on s'expose plus facilement à un DoS. :roll:
 

darkjukka

WRInaute impliqué
Changement de système alors, anti-flood qui renvoie vers Google (pas trouvé mieux lol) si il y a moins de 30 secondes entre 2 exécutions du script.
 

Discussions similaires

Haut