Salut à tous,

Je travaille sur la partie accès sécurisé de mon site. J'ai une page sur laquelle je check mot de passe et login + hash + grain de sel etc.

Avant tout sachez que j'ai testé ce code sur Firefox, Opera et Chrome et qu'il n'y aucun problème. C'est quand j'ai testé sous internet explorer que j'ai vu que ça foirait.

Plus précisément, voici le code de ma page de vérification des données entrées dans le formulaire :

Formulaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
<div id="formulaire_connexion">
<form action="index.php?page=accueil_connexion_check" method="post" enctype="multipart/form-data">
<div class="username">Username :</div>
<div class="inputconnexion"><input type="text" name="pseudo" size="15" MAXLENGTH="15"/></input></div>
<div class="username">Password :</div>
<div class="inputconnexion"><input type="text" name="passe" size="15" MAXLENGTH="15"/></input></div>
<div class="imagesubmit"><input type="image" value="submit" src="images/bouton_valider.gif"name="connexion"/></input></div>
</form>
</div>


Page de vérification


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
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
132
133
134
135
136
137
138
139
140
141
142
143
<?php
	// Démarrage de la session
 
 
$Resultatidentification='defaultvalue';
        // Si on a dépassé le temps de blocage
        if(isset($_SESSION['nombre']) 
        and $_SESSION['timestamp_limite'] < time())
        {
                // Destruction des variables de session
                unset($_SESSION['nombre']);
                unset($_SESSION['timestamp_limite']);
        }
 
	// Si le cookie n'existe pas 
	if(!isset($_COOKIE['marqueur']))
	{	
 
		// Si le formulaire est correctement rempli 
		if(isset($_POST['connexion']) 
		and !empty($_POST['pseudo'])  
		and !empty($_POST['passe'])) 
		{
 
			// Si la variable de session qui compte le nombre de soumissions n'existe pas
			if(!isset($_SESSION['nombre']))
			{
				// Initialisation de la variable 
				$_SESSION['nombre'] = 0;
                                // Blocage pendant 10 min
                                $_SESSION['timestamp_limite'] = time() + 60*10;
			}
 
			// Sécurisation des variables 
			$pseudo = mysql_real_escape_string($_POST['pseudo']); //==========PSEUDO
 
			     // On hache le passe récupéré à partir d'un formulaire
			function hacher($passe)
			{
				// Nos grains de sel
				define("PREFIXE", "zer0");
				define("SUFFIXE", "forever");
 
				// Faites tournez le Hachage
				$passe = md5( sha1(PREFIXE) . $passe . sha1(SUFFIXE) );
 
				return $passe;
			}
			$passe = hacher($_POST['passe']);//=============PASS
 
 
			// Si on n'essaye pas de nous attaquer par force brute 
			if($_SESSION['nombre'] < 10)
			{
				connexion_DB('amispher_main');
 
				// Envoie de la requête au serveur 
					$requete = mysql_query("SELECT id,pseudo,type 
			FROM administration
			WHERE pseudo = '$pseudo' 
			AND passe = '$passe'")or die(mysql_error());
 
				// Ici, vous traitez les résultats de votre requête à votre guise 
 
					$resultat = mysql_num_rows($requete);
					$info_user=mysql_fetch_array($requete);
 
					 //======= On compare les deux empreintes =======
					  if ($resultat==1)
					 {
 
					  $Resultatidentification='Authentification réussie';
					  $css_img_resultat='img_resultat_op_succes';
 
					  $_SESSION['usertype']=$info_user['type'];
					  //echo $_SESSION['usertype'];
 
					  $delai=2; // le nombre de secondes
 
					  if ($_SESSION['usertype']== 'admin') 
					  {
					  $url='http://localhost/newamisphere/admin.php';
					  }elseif ($_SESSION['usertype']== 'membre') {
					  $url='http://localhost/newamisphere/membres.php';
					  }
 
 
 
					  header("Refresh: $delai;url=$url");
 
 
					 }
					 else
					 {
					  $Resultatidentification="Le mot de passe ou le nom d'utilisateur est incorrecte";
					  $css_img_resultat='img_resultat_op_echec';
 
					  $delai=2; // le nombre de secondes
					  $url='http://localhost/newamisphere/';
					  header("Refresh: $delai;url=$url");
					 }
						// Incrémentation de notre variable de session 
						$_SESSION['nombre']++;
 
						//echo $_SESSION['nombre'];
 
			}
			// Si on a dépassé les 10 tentatives ==> ATTAQUE PAR FORCE BRUTE !!!
			else
			{
				// Si le cookie marqueur n'existe pas on le crée 
		                if(!isset($_COOKIE['marqueur']))
		                {
			             $timestamp_marque = time() + 60; // On le marque pendant une minute 
                                     $cookie_vie = time() + 60*60*24; // Durée de vie de 24 heures pour le décalage horaire
			             setcookie("marqueur", $timestamp_marque, $cookie_vie);
		                }
 
				// on quitte le script
				exit();
			}
 
		} else {
		$Resultatidentification='Les deux champs "Username" et "Password" doivent être remplis';
		$css_img_resultat='img_resultat_op_echec';
		$delai=2; // le nombre de secondes
	    $url='http://localhost/newamisphere/';
	    header("Refresh: $delai;url=$url");
		}		
 
 
 
	}
	// Si le cookie existe
	else
	{
			// Si le temps de blocage a été dépassé
			if($_COOKIE['marqueur'] < time())
			{
					 // Destruction du cookie
					 setcookie("marqueur", "", 0);
			}
	}
J'ai fais des recherches sur le net. Certains disaient qu'il y a des bugs avec les cookies sous explorer.

J'ai aussi lu sur developpez.com que la durée des sessions peut être gérée dans le php.ini. Cela veut il dire que je peux me passer de $_COOKIE et setcookie ??

Merci de votre aide.

John