Bonjour à tous...
Mon projet : construire une page d'identification légère et sécurisé.
J'utilise un accès Https avec SSL certifié niveau 2
Php 4.4.9 OU Php 5.2.9 OU Pph 6.0.0 (Dev)
Je me suis inspiré de la méthode des accès aux comptes bancaires en ligne du style Bnp.net
Je souhaite rendre l'application 100% compatible IE7 et FF3.
L'idée c'est de générer une image en forme de grille 4 x 4 et de disposer les numéro de 1 à 9 de façon aléatoire.
Pour l'utiliser comme un pavé numérique pour remplir le champs mot de passe, fixé lui en lecture seule.
Reste à faire une comparaison des champs via des données stockées dans une base MySql.
Si j'ai bien compris l'avantage majeur de cette méthode : éviter les attaques en force brute et de rajouter des images types captchas.
J'ai commencé à lire pas mal de post en ce qui concerne la protection des sessions donc je vais rajouter pas mal de choses à ce sujet je pense.
Ex: brider le nombre d'essais avec identification par IP entre autre, ...
DONC POUR RESUMER : QUE PENSEZ-VOUS DE CETTE METHODE D'IDENTIFICATION ? VOYEZ-VOUS UNE FAILLE POTENTIELLEMENT IMPORTANTE ?
CI-DESSOUS LES EXTRAITS DU DEBUT DE MON PROJET
Formulaire page d'identification
1. textfield nom d'utilisateur
2. textfield mot de passe (lecture seule)
3. image grille 4 x 4 (cf. ci-dessous code image.php)
4. script pour écrire le code dans le textfield mot de passe
Fichier image.php
Code : 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 <script> <!-- function bloc ( lettre ) { if ( document.formulaire.motdepasse.value.length < 8 ) document.formulaire.motdepasse.value = document.formulaire.motdepasse.value + lettre; } --> </script> <form id="formulaire" name="formulaire" method="post" action="verif.php"> <input type="text" name="login" id="login" /> <input type="password" name="motdepasse" id="motdepasse" readonly="readonly" /> <img src="image.php" usemap="#map" border="0" /> <map name="map" id="map"> <area shape="rect" coords="0,0,30,30" href="#" onclick="javascript : bloc ('A')" /> <area shape="rect" coords="0,30,30,60" href="#" onclick="javascript : bloc ('B')" /> <area shape="rect" coords="0,60,30,90" href="#" onclick="javascript : bloc ('C')" /> <area shape="rect" coords="0,90,30,120" href="#" onclick="javascript : bloc ('D')" /> <area shape="rect" coords="30,0,60,30" href="#" onclick="javascript : bloc ('E')" /> <area shape="rect" coords="30,30,60,60" href="#" onclick="javascript : bloc ('F')" /> <area shape="rect" coords="30,60,60,90" href="#" onclick="javascript : bloc ('G')" /> <area shape="rect" coords="30,90,60,120" href="#" onclick="javascript : bloc ('H')" /> <area shape="rect" coords="60,0,90,30" href="#" onclick="javascript : bloc ('I')" /> <area shape="rect" coords="60,30,90,60" href="#" onclick="javascript : bloc ('J')" /> <area shape="rect" coords="60,60,90,90" href="#" onclick="javascript : bloc ('K')" /> <area shape="rect" coords="60,90,90,120" href="#" onclick="javascript : bloc ('L')" /> <area shape="rect" coords="90,0,120,30" href="#" onclick="javascript : bloc ('M')" /> <area shape="rect" coords="90,30,120,60" href="#" onclick="javascript : bloc ('N')" /> <area shape="rect" coords="90,60,120,90" href="#" onclick="javascript : bloc ('O')" /> <area shape="rect" coords="90,90,120,120" href="#" onclick="javascript : bloc ('P')" /> </map> <input type="reset" name="bouton1" id="bouton1" value="Corriger" /> <input type="submit" name="bouton2" id="bouton2" value="Envoyer" /> </form>
1. ouverture session
2. création image et de la grille 4 x 4
3. disposition aléatoire des numéros de 1 à 9
4. stockage ordre des numéros dans la session
Fichier verif.php
Code : 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 <?php session_start(); header ("Content-type: image/png"); $image = imagecreate(120,120); $noir = imagecolorallocate($image, 0, 0, 0); $font = "arial.ttf"; $tableau = array (1,2,3,4,5,6,7,8,9,'','','','','','',''); shuffle($tableau); $_SESSION["tableau"] = $tableau; imagettftext($image, 16, 0, 9, 22, $noir, $font, $tableau[0]); imagettftext($image, 16, 0, 9, 52, $noir, $font, $tableau[1]); imagettftext($image, 16, 0, 9, 82, $noir, $font, $tableau[2]); imagettftext($image, 16, 0, 9, 112, $noir, $font, $tableau[3]); imagettftext($image, 16, 0, 39, 22, $noir, $font, $tableau[4]); imagettftext($image, 16, 0, 39, 52, $noir, $font, $tableau[5]); imagettftext($image, 16, 0, 39, 82, $noir, $font, $tableau[6]); imagettftext($image, 16, 0, 39, 112, $noir, $font, $tableau[7]); imagettftext($image, 16, 0, 69, 22, $noir, $font, $tableau[8]); imagettftext($image, 16, 0, 69, 52, $noir, $font, $tableau[9]); imagettftext($image, 16, 0, 69, 82, $noir, $font, $tableau[10]); imagettftext($image, 16, 0, 69, 112, $noir, $font, $tableau[11]); imagettftext($image, 16, 0, 99, 22, $noir, $font, $tableau[12]); imagettftext($image, 16, 0, 99, 52, $noir, $font, $tableau[13]); imagettftext($image, 16, 0, 99, 82, $noir, $font, $tableau[14]); imagettftext($image, 16, 0, 99, 112, $noir, $font, $tableau[15]); imageline ($image, 0, 30, 120, 30, $noir); imageline ($image, 0, 60, 120, 60, $noir); imageline ($image, 0, 90, 120, 90, $noir); imageline ($image, 30, 0, 30, 120, $noir); imageline ($image, 60, 0, 60, 120, $noir); imageline ($image, 90, 0, 90, 120, $noir); imagepng($image); imagedestroy($image); ?>
1. récupération des POST du formulaire
2. conversion de la matrice du mot de passe en chiffre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <?php session_start(); $tableau = $_SESSION["tableau"]; $login = $_POST["login"]; $motdepasse = $_POST["motdepasse"]; for ($i=0; $i<strlen($motdepasse); $i++){ echo $tableau[convert($motdepasse[$i])]; } function convert ( $lettre ) { $tab = array("A" => "0","B" => "1","C" => "2","D" => "3","E" => "4","F" => "5","G" => "6","H" => "7","I" => "8","J" => "9","K" => "10","L" => "11","M" => "12","N" => "13","O" => "14","P" => "15",); $lettre = strtr("$lettre", $tab); return $lettre; } ?>
Partager