setcookie time() avec Internet explorer
Salut à tous, :D
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:
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:
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 :D