Salut à tous,
je tente de construire un systeme de login (ou le login est l'email) pour un site et afin de proteger contre des tentatives de craquage du mot de passe j'ai voulu limiter à 3 essais.
Pour résumé, le visiteur entre un email et un mdp , si il y a un probleme je cré une variable de session $_SESSION['ProtectAccount']
dans $_SESSION['ProtectAccount']['mails'][$keyMails] je met l'email que le visiteur a entré
et dans $_SESSION['ProtectAccount']['mails'][$keyMails]['count'] le nombre de tentative deja faite pour se logger sur l'email.
De maniere a ce que le visiteur lors d'une meme session ne puisse faire que 3 essais max par email (le nombre d'email tenté n'est pas limité)
Le ros souci que j'ai c'est que lors des test quand je fais $_SESSION['ProtectAccount']['mails'][$keyMails] = $email , où $email = 'eilijah@mail.com', il m'enregistre '1ilijah@mail.com' dans le tableau, je sais pas du tout pourquoi il me change la premiere lettre en '1' ?!
Je me disais que c'etait peut etre parce que $_SESSION['ProtectAccount']['mails'][$keyMails] est en string et $_SESSION['ProtectAccount']['mails'][$keyMails]['count'] est en integer, ca le fait peut etre bugger?
voila le code, c'est un peu long désolé :/ :
Code index.php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 <?php session_start (); // tests de debugage >> affichage des variables echo '$email = '.$_SESSION['Cquoicbordel1']."<br />" .'$_SESSION[\'ProtectAccount\'][\'mails\'][$nextKey] = '.$_SESSION['Cquoicbordel2']."<br />" .'$_SESSION[\'keyMail\'] = '.$_SESSION['keyMail']."<br/>" .'$_SESSION[\'ProtectAccount\'][\'mails\'][$_SESSION[\'keyMail\']] = '.$_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]."<br/>" .' = '."<br/>" .' = '."<br/>" .' = '."<br/>"; print_r($_SESSION['ProtectAccount']); echo "<br />"; print_r($_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count']); //fin test //Variables par defaut : $pageHeader = "header.view.php" ; $pageBody = "body.view.php" ; $pageFooter = "footer.view.php" ; $pageStyle = "../public/css/style.css"; settype($_ENV['blacklist'], "array"); //------------------------------------------------------------------------------------------------------------------// //----------------------------------------- User isn't logged --------------------------------------------------// if (!isset($_SESSION['userId']) || $_SESSION["userId"] == "") { if (ereg("logout.php$", $_SERVER['HTTP_REFERER']) && !isset($_SESSION['userId'])) { $sMessages[]="merci, vous êtes maintenant déconnecté"; } if (isset($_SESSION['existingEmail']) && !empty($_SESSION['existingEmail'])) { $_POST['login'] = $_SESSION['existingEmail']; $sMessages[]="Le compte lié à cet email existe déjà !"; unset($_SESSION['existingEmail']); } if (isset($_SESSION['emailedPass']) && $_SESSION['emailedPass'] == true) { $sMessages[]="L'inscription s'est bien déroulée, vous allez recevoir votre mot de passe à l'adresse email que vous avez indiqué"; unset($_SESSION['emailedPass']); } elseif (isset($_SESSION['emailedPass'])) { $sMessages[]="Nous n'avons pas pu réinitialiser le mot de passe, une erreure s'est produite, contactez le webmaster pour plus de details."; unset($_SESSION['emailedPass']); } if (isset($_SESSION['pbLogin']) && $_SESSION['pbLogin'] == 1) { $sMessages[]="Attention, vous devez remplir les 2 champs"; unset($_SESSION['pbLogin']); } if (isset($_SESSION['badLogin']) && $_SESSION['badLogin'] == 1) { $sMessages[]="L'email que vous avez entrée n'existe pour aucun compte, veuillez la vérifier svp"; $_POST['login'] = $_SESSION['badLoginEmail']; unset($_SESSION['badLogin']); } if (isset($_SESSION['badEmail']) && $_SESSION['badEmail'] == 1) { $sMessages[]="Vous devez entrer un email valide"; unset($_SESSION['badEmail']); } if (isset($_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count']) && $_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count'] >= 0 && $_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count'] < 3) { $tries = 5 - $_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count']; $sMessages[]="Mauvais mot de passe, vous avez encore $tries tentatives"; } elseif (isset($_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count']) && $_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count'] >= 3) { $sMessages[]="Le mot de passe à été réinitialisé, vérifier votre boite email pour le récupérer"; unset($_SESSION['badPass']); } elseif (isset($_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count']) && $_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count'] == -1) { $sMessages[]="Le mot de passe à été réinitialisé, cependant il semble y avoir eut une erreure lors de l'envoi de l'email<br /> Veuillez contacter l'administrateur pour résoudre ce problème."; unset($_SESSION['badPass']); } if (in_array($_SERVER['REMOTE_ADDR'], $_ENV['blacklist'])) { $sMessages[]="Vous avez fait trop de tentatives, vous devez attendre 12 heures pour vous reloguer"; } else { $pageHeader = "header.view.php"; $pageBody = "identification.view.php"; }//else => in_array($_SERVER['REMOTE_ADDR'], $_ENV[blacklist])) == false }//if (!isset($_SESSION['userId']) || $_SESSION["userId"] == "") //------------------------------------------------------------------------------------------------------------------// //-------------------------------------------- User is logged --------------------------------------------------// else //(isset($_SESSION['userId']) || $_SESSION["userId"] != "") { if (empty($_GET)) { $pageBody = "usersHome.view.php"; } else { foreach ($_GET as $key => $value) { if ($key == "module") { $pageBody = $value.".view.php"; } } } } include_once "./views/main.template.php"; ?>
Code login.php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119 <?php session_start (); include_once "constants.php"; include_once "functions.php"; if($_POST["login"] != "" && $_POST["pass"] != "") { if (validateEmail($_POST["login"])) { $email = $_POST["login"] ; $mysqlConnexion = mysql_connect(M_SERVEUR, M_LOGIN, M_PASS) or die('Could not connect to mysql server.<br />'.mysql_error()) ; $dbConnexion = mysql_select_db(M_DB,$mysqlConnexion) or die('Could not select database.<br />'.mysql_error()); $query = "SELECT * FROM `users` WHERE `email` = '$email' "; $result = @mysql_query($query, $mysqlConnexion) or die ($query."<br />".mysql_error()) ; if (mysql_num_rows($result)== 1) { $aEntry = mysql_fetch_array($result) or die(mysql_error()); $hash = niceHash($_POST["pass"],$email); if ($hash == $aEntry['pass']) { $_SESSION['userId'] = $aEntry['id']; $url = getParentDir(basename(__FILE__))."index.php"; header('location:'.$url); } else { ob_start("mail"); if (isset ($_SESSION['ProtectAccount'])) { $nextKey = 0; foreach($_SESSION['ProtectAccount']['mails'] as $keyMails => $valueMails) { $nextKey++; //compteur de clé if($valueMails == $email) { $_SESSION['keyMail'] = $keyMails; if($_SESSION['ProtectAccount']['mails'][$keyMails]['count'] < 2 && $_SESSION['ProtectAccount']['mails'][$keyMails]['count'] >= 0) $_SESSION['ProtectAccount']['mails'][$keyMails]['count']++; elseif($_SESSION['ProtectAccount']['mails'][$keyMails]['count'] >= 2) { $_SESSION['ProtectAccount']['mails'][$keyMails]['count']++; //$_ENV['blacklist'][] = $_SERVER['REMOTE_ADDR'] ; $pass = generatePass(10); $hash = niceHash($pass,$email); $query = "UPDATE `users` SET `pass` ='$hash' WHERE `id` =' ".$aEntry['id']." ' "; $update = @mysql_query($query, $mysqlConnexion) or die ($query."<br />".mysql_error()) ; if($update) { //envoi du mot de passe par email $messageTxt = "Bonjour ! \n" ."Quelqu'un a tenté de se connecter a votre compte et s'est trompé 3 fois,\n" ."Par mesure de sécurité nous réactualisaons donc votre mot de passe.\n" ."Votre nouveau mot de passe : $pass"; $messageHtml = "<h1>Bonjour !</h1> <br /> Quelqu'un a tenté de se connecter a votre compte et s'est trompé 3 fois,<br /> Par mesure de sécurité nous réactualisaons donc votre mot de passe.<br /> Votre nouveau mot de passe : $pass"; $from = "utopiste@esprits-libres.fr"; $envoye = theEmail($email, MAIL_FROM_NAME, MAIL_FROM_MAIL, MAIL_REPLY_MAIL, 'Esprits-libres', $messageTxt, $messageHtml); if($envoye == false) { $_SESSION['ProtectAccount']['mails'][$keyMails]['count'] = -1; } } } } else //$valueMails != $email $_SESSION['keyMail'] = -1; } if ($_SESSION['keyMail'] == -1)// c'est la premiere fois que la session tente de se connecter au compte de cet email { $_SESSION['Cquoicbordel1'] = $email; $_SESSION['ProtectAccount']['mails'][$nextKey] = $email; $_SESSION['Cquoicbordel2'] = $_SESSION['ProtectAccount']['mails'][$nextKey]; $_SESSION['ProtectAccount']['mails'][$nextKey]['count'] = 1; $_SESSION['keyMail'] = $nextKey; } } else // !isset ($_SESSION['ProtectAccount']) { $_SESSION['ProtectAccount'] = array(); $_SESSION['ProtectAccount']['mails'][0] = $email; $_SESSION['ProtectAccount']['mails'][0]['count'] = 1; $_SESSION['keyMail'] = 0; }// fin du test anti forcebrut $url = getParentDir(basename(__FILE__))."index.php"; header("Refresh: 0; url=$url"); ob_end_flush(); }// else mot de passe entré != du mot de passe de la bd }// if (mysql_num_rows($result)== 1) else // le login n'existe pas dans la Base { $_SESSION['badLogin'] = 1; $_SESSION['badLoginEmail'] = $email; $url = getParentDir(basename(__FILE__))."index.php"; header('location:'.$url); } mysql_close(); }//if (validateEmail($_POST["login"])) else //!validateEmail($_POST["login"]) { $_SESSION['badEmail'] = 1; $url = getParentDir(basename(__FILE__))."index.php"; header('location:'.$url); } }//if($_POST["login"] != "" && $_POST["pass"] != "") else //$_POST["login"] == "" || $_POST["pass"] == "" { $_SESSION['pbLogin']=1; $url = getParentDir(basename(__FILE__))."index.php"; header('location:'.$url); } ?>
Code vue du formulaire : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <form action="login.php" method="post"> <p> <label for="login">Veuillez taper votre email :</label> <input type="text" id="login" name="login" value="<?php echo htmlentities($_POST['login']);?>" /> </p> <p> <label for="pass">Tapez votre mot de passe :</label> <input type="password" id="pass" name="pass" value="<?php echo htmlentities($_POST['pass']);?>" /> </p> <p> <input type="submit" value="Envoyez" /> </p> </form> <p> <a href="suscribing.php">S'inscrire</a> </p> <p> <a href="getPass.php">Récupérer son mot de passe</a> </p>
Il y a pas mal de code et c'est peut etre pas indenté comme vous avez l'habitude mais bon si vous pouvez jeter un oeil, parce que vraiment je capte pas et ca m'enerve qu'il change des caractere dans mes variable sans que je sache pourquoi.
en passant au début j'ai egalement récupéré l'ip du visiteur dans $_SESSION['ProtectAccount']['ip'] et là il me remplacé le premier chiffre par une lettre!!!
genre $_SESSION['ProtectAccount']['ip'] = 111.111.111.111, l'echo renvoit "e11.111.111.111".
Fin'bref je comprend pas ce qu'il se passe.
si jamais vous avez des reflexions a faire sur le code qui ne concerne pas ce probleme , elles sont les bienvenue egalement![]()
Partager