setcookie time() Problème avec Internet explorer

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par hx.jonathan, 14 Janvier 2010.

  1. hx.jonathan
    hx.jonathan WRInaute discret
    Inscrit:
    2 Mars 2005
    Messages:
    159
    J'aime reçus:
    0
    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:
    <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:
    <?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.

    Je me suis inspiré d'un tutoriel sur le site du zéro.

    Merci de votre aide.

    John :D
     
  2. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 774
    J'aime reçus:
    0
    Regarde les commentaires de la fonction setcookie sur php.net (en recherchant "Explorer"). Le bug doit venir que la durée du coookie est trop longue.
    En le passant en hexadécimal, ceci devrait fonctionner (je ne connais pas la fonction pour).
    J'utilise : 0x7fffffff qui veut dire "un an".

    Edit: pour vraiment voir comment sont générés tes cookies, je te conseillerais d'utiliser curl -vv pour bien voir le format.
     
Chargement...
Similar Threads - setcookie time() Problème Forum Date
A quoi sert le petit code SetCookie suivant Développement d'un site Web ou d'une appli mobile 23 Août 2012
php 5.3.8 problème de variable avec setcookie Développement d'un site Web ou d'une appli mobile 13 Avril 2012
Probleme setcookie et header(location) Développement d'un site Web ou d'une appli mobile 10 Mars 2010
Besoin d'aide : setcookie pour garder un "parrain" Développement d'un site Web ou d'une appli mobile 9 Juin 2006
Probleme avec la fonction time() Développement d'un site Web ou d'une appli mobile 12 Février 2010
Fiabilité de la fonction time() en php ? Développement d'un site Web ou d'une appli mobile 27 Juin 2009
Convertir datetime en time() Développement d'un site Web ou d'une appli mobile 23 Juin 2008
{RESOLU} [PHP] Problème étrange... date(), time() Développement d'un site Web ou d'une appli mobile 20 Mars 2007
Problème "strtotime()" et "date()" Développement d'un site Web ou d'une appli mobile 13 Août 2006