connexion automatique

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : connexion automatique

Re: connexion automatique

par spedgreg » 05 nov. 2011, 10:18

C'est bon j'ai supprimé cette ligne

$donnee = array_map ('mysql_real_escape_string',($row));

vu que tu m'a dis qu'elle est inutile, :wink: je me suis dis "ça va faire une sécurité en + :D "

Sinon je viens de tester ma connexion auto ça fonctionne parfaitement, j'ai même simulé des erreurs, j'ai volontairement changé des donnée différente dans le champs le "hask cookie" dans ma base de donné , je relance ma page en connexion auto et là magique je suis déconnecté conclusion

OUfff après 4 jours de réflexion et d'aide tout fonctionne c'est résolu :o je te remercie vraiment pour ton efficacité !!!!!

Re: connexion automatique

par xTG » 05 nov. 2011, 09:36

C'est cela.
Par contre cette ligne :
//protection des injection SQL
$donnee = array_map ('mysql_real_escape_string',($row));
est totalement inutile.

Re: connexion automatique

par spedgreg » 04 nov. 2011, 23:11

je crois j'ai compris :wink:

donc sur ma page index je fais comme ça:

<?php if(!empty($_COOKIE['connexion_automatique']) && empty($_SESSION['id_nom']))
{ 
                                // Sélection de l'utilisateur concerné						
   $result = mysql_query("
                    SELECT id, Nom_Utilisateur, Mot_de_Passe, hash_cookie
                    FROM Comptes_Utilisateurs
                    WHERE hash_cookie = '" .mysql_real_escape_string($_COOKIE['connexion_automatique']). "'					
                      ");
					  
					           // Récupération des données hash cookie,id, nom utilisateur 
					           $row = mysql_fetch_array($result);

                                                      //protection des injection SQL
					           $donnee = array_map ('mysql_real_escape_string',($row));
					
                                                      // reforme le hash et le compare avec hash de la base de donée
					$test=sha1('aaa'.$donnee["Nom_Utilisateur"].'bbb'.$donnee["Mot_de_Passe"].'ccc') === $donnee["hash_cookie"];
}
						
				if(!empty($test) && !empty($_COOKIE['connexion_automatique']))
                                {
							   // si c'est ok je reforme les deux sessions            		   
                                       $_SESSION['id']=$donnee["id"];
                                       $_SESSION['id_nom']=$donnee["Nom_Utilisateur"];
				}		      
				 


C'est mieux?

Re: connexion automatique

par xTG » 04 nov. 2011, 22:02

mysql_real_escape_string() est à utiliser sur la variable à injecter dans la requête.
L'utiliser lors de la création du cookie est inutile, puisque le risque c'est justement que quelqu'un falsifie la valeur du cookie après que ce dernier ai été créé...

Re: connexion automatique

par spedgreg » 04 nov. 2011, 21:03

grrrr grrr :( je sais plus quoi faire .... dur dur d’être débutant

Re: connexion automatique

par xTG » 04 nov. 2011, 20:08

Cela ne change strictement rien au précédent code, et c'est toujours soumis aux règles de l'injection SQL. ^^

Re: connexion automatique

par spedgreg » 04 nov. 2011, 18:02

J'ai entendu vaguement parlé de PDO il faut alors que je me forme :)

Sinon J'ai réussi une autre méthode pour ma connexion auto, ça fonctionne, et je pense que là qu'il n'y a plus de faille :wink:

j'ai ajouté un nouveau champs "hash_cookie" dans ma table "compte utilisateurs"

Lors de l’inscription d'un nouveau membre en plus du nom utilisateur, e-mail, .... j'enregistre ça:
$hash_cookie = mysql_real_escape_string(sha1('aaa'.$username.'bbb'.sha1($password).'ccc'));
puis sur ma page connexion c'est une include, je récupère les donnée id, hash_cookie, ... je crée mais 2 SESSIONS et si la personne coche la "connexion auto"que je crée que 1 seul COOKIE
							   
setcookie('connexion_automatique', $row["hash_cookie"], time() + 3600*24*365, '/');
sur ma page index je fais ça :

<?php if(!empty($_COOKIE['connexion_automatique']) && empty($_SESSION['id_nom']))
{ 
                                // Sélection de l'utilisateur concerné						
$result = mysql_query("
                    SELECT id, Nom_Utilisateur, Mot_de_Passe, hash_cookie
                    FROM Comptes_Utilisateurs
                    WHERE hash_cookie = '" . $_COOKIE['connexion_automatique'] . "'					
                      ");
					  
					           // Récupération des données hash cookie,id, nom utilisateur
					$row = mysql_fetch_array($result);

					// reforme le hash et le compare avec hash de la base de donée
				if(sha1('aaa'.$row["Nom_Utilisateur"].'bbb'.$row["Mot_de_Passe"].'ccc') == $row["hash_cookie"])
                 {
							   // si c'est ok je reforme les deux sessions            		   
              $_SESSION['id']=$row["id"];
              $_SESSION['id_nom']=$row["Nom_Utilisateur"];
							      
				 }	
             	                 		  
            
}	


alors que en pense tu? :D

Re: connexion automatique

par xTG » 04 nov. 2011, 14:54

Il y a un risque d'injection SQL.
Regardes la fonction mysql_real_escape_string() dans la documentation. ;)

De plus le driver mysql n'est plus tenu à jour, il serait plus intéressant de passer à PDO, ou tout du moins aux fonctions mysqli (un autre driver pour le sgbd mysql mais qui lui est toujours maintenu).

Re: connexion automatique

par spedgreg » 04 nov. 2011, 13:51

:D hihi j'ai la tête tellement dans les codes que j'ai du mal à dormir.

Bon j'ai codé ce que tu m'as dis de faire j'ai testé il y a pas d'erreur et ça fonctionne :P ,

dis moi si j'ai bien codé et que ma connexion auto prend bien en compte les deux cookies ['id']et['connexion_automatique'] pour pas qu'il y est une faille?

merci beaucoup de m'avoir aidé car sinon j'aurais fais des nuit blanche à réfléchir... :)

Ma page index.php

<?php if(!empty($_COOKIE['id'])&& !empty($_COOKIE['connexion_automatique']) && empty($_SESSION['id_nom']))
{ 
                                // Sélection de l'utilisateur concerné						
$result = mysql_query("
                    SELECT id, Nom_Utilisateur, Mot_de_Passe
                    FROM Comptes_Utilisateurs
                    WHERE id = '" . $_COOKIE['id'] . "'					
                      ");
					  
					           // Récupération des données id, nom utilisateur, mot de passe
					$row = mysql_fetch_array($result);
					
					               // je reforme le hash cookie avec le nom utilisateur et mot de passe
				$hash_cookie = sha1('aaa'.$row["Nom_Utilisateur"].'bbb'.$row["Mot_de_Passe"].'ccc');
				
						// 	je le compare
             if (($_COOKIE['connexion_automatique'] AND $hash_cookie) == true)
		{
	                 // Reformation des deux sessions            		   
              $_SESSION['id']=$row["id"];
              $_SESSION['id_nom']=$row["Nom_Utilisateur"];
			  
               }  
}	
if(!empty($_SESSION['id'])) {
?>
<p>
         
		   
      [<?php echo htmlspecialchars($_SESSION['id_nom'], ENT_QUOTES, 'UTF-8'); ?>]
	  <a class="accueil" href="deconnexion.php">Déconnexion</a><hr />
	  	  
	<img src="image/control.gif" alt="espace membre" title="espace membre" />&nbsp;<a class="accueil" href="page_membre.php">Espace utilisateur</a><br />
	
	 
</p>
<?php } else 

{ 
    require "include/connexion.inc.php";
	echo '<br /><a class="accueil" href="creer-compte-utilisateur.php">S\'inscrire</a>';	
}
?>

</div>

Re: connexion automatique

par xTG » 04 nov. 2011, 12:14

Ehoh, on dort nous de temps à autre. :P

Code : Tout sélectionner

SI comparaison(hash_cookie, hash_bdd) == VRAI Alors Ouvrir Session Sinon Ne rien faire ou afficher une erreur : session invalide, ect... FinSi

Re: connexion automatique

par spedgreg » 04 nov. 2011, 09:42

Il y a plus personne pour me répondre :(

Re: connexion automatique

par spedgreg » 03 nov. 2011, 20:11

Je viens de faire ce que tu m'a expliqué pas à pas, j'ai testé ça fonctionne :D mais pense tu que c'est ok qu'il n'y a pas de faille...? :|

ma page connexion.inc.php j'ai haché le cookie avec mot de passe + nom utilisateur avec grain
      if(isset($_POST['CB_Connexion_Automatique']))   // si l'utilisateur coche connexion auto 
	{	
	// Création des cookies  
               // hash cookie contenant  utilisateur et mot de passe avec grain

                           $hash_cookie = sha1('aaa'.$username.'bbb'.sha1($password).'ccc');
                                                               
       // Définition du temps d'expiration des cookies

                         $expiration =empty($_POST["CB_Connexion_Automatique"]) ? 0 : time() + 90 * 24 * 60 * 60;
						 
        // Création des cookies id et connexion auto

                        setcookie( 'id', $_SESSION['id'], $expiration, '/');
                        setcookie('connexion_automatique', $hash_cookie, $expiration, '/');
			                         
 }
ma page index.php tu lira les commentaires dans le code, pour la comparaison il y a plus rien à mettre à la suite? bref tu verra le code ...
<?php if(!empty($_COOKIE['id'])&& !empty($_COOKIE['connexion_automatique']) &&  empty($_SESSION['id_nom']))
{ 
                                // Sélection de l'utilisateur concerné						
$result = mysql_query("
                    SELECT id, Nom_Utilisateur, Mot_de_Passe
                    FROM Comptes_Utilisateurs
                    WHERE id = '" . $_COOKIE['id'] . "'					
                      ");
					  
					           // Récupération des données id, nom utilisateur, mot de passe
					$row = mysql_fetch_array($result);
					
					               // je reforme le hash cookie avec le nom utilisateur et mot de passe
				$hash_cookie = sha1('aaa'.$row["Nom_Utilisateur"].'bbb'.$row["Mot_de_Passe"].'ccc');
				
							// 	je le compare
                                              $_COOKIE['connexion_automatique'] == $hash_cookie;

                                                     // après la comparaison que dois-je mettre?

	 // je reforme les deux sessions
              		   
              $_SESSION['id']=$row["id"];
              $_SESSION['id_nom']=$row["Nom_Utilisateur"];
        	 
}

if(!empty($_SESSION['id_nom'])) 
{
?>
<p>
           vous êtes connecté

</p>
<?php
}
?>

Re: connexion automatique

par xTG » 03 nov. 2011, 14:15

Enregistres un cookie contenant le hash des informations du membre.
Email et nom par exemple (plus un grain :P).
Ainsi pour vérification tu récupères l'email et le nom grâce au cookie id et tu reformes le hash.
Si le hash formé est égal au hash dans le second cookie tout est ok, sinon c'est une falsification. :)

Re: connexion automatique

par spedgreg » 03 nov. 2011, 12:36

Oufff :P j'ai testé ça marche "la connexion auto" mais j'ai utilisé que un seul cookie $_COOKIE['id'] mais comme tu m'as dis " que avec un seul cookie surtout [ID] il y a juste a modifier le cookie et on est connecté en admin!
J'ai rajouté sur ma page connexion.inc.php un 2eme cookie

if(isset($_POST['CB_Connexion_Automatique']))
		{						  				   								 															        
				// Création du deuxième cookies  
                       $navigateur = (!empty($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : '';
                        $hash_cookie = sha1('aaa'.$username.'bbb'.$password.'ccc'.$navigateur.'ddd');
                                                               
                       // Définition du temps d'expiration des cookies
                         $expiration =empty($_POST["CB_Connexion_Automatique"]) ? 0 : time() + 90 * 24 * 60 * 60;
                       
                       setcookie( 'id', $_SESSION['id'], $expiration, '/');
                       setcookie('connexion_automatique', $hash_cookie, $expiration, '/');    // deuxième cookie
			                         
		 }

Ma page index.php
<?php if(isset($_COOKIE['id'])&& !isset($_SESSION['id_nom']))
{ 
// début de la partie que vous m'avez aidé
$result = mysql_query("
                    SELECT id, Nom_Utilisateur
                    FROM Comptes_Utilisateurs
                    WHERE id = '" . $_COOKIE['id'] . "'
               ");
	 // Récupération des données
              $row = mysql_fetch_array($result);		   
              $_SESSION['id']=$row["id"];
              $_SESSION['id_nom']=$row["Nom_Utilisateur"];
//fin de la partie        	 
}

if(isset($_SESSION['id_nom'])) {
?>
<p>
      [<?php echo htmlspecialchars($_SESSION['id_nom'], ENT_QUOTES, 'UTF-8'); ?>]
	  <a class="accueil" href="deconnexion.php">Déconnexion</a><hr />
	  	  
	<img src="image/control.gif" alt="espace membre" title="espace membre" />&nbsp;<a class="accueil" href="page_membre.php">Espace utilisateur</a><br />
	
	 
</p>
<?php } else 

{ 
    require "include/connexion.inc.php";
	echo '<br /><a class="accueil" href="creer-compte-utilisateur.php">S\'inscrire</a>';	
}
?>

Donc sur ma page index.php il y a que un seul cookie donc risque de se faire voler le cookie comment faire pour rajouter le deuxième cookie haché
  $_COOKIE['connexion_automatique']
MERCI :)

Re: connexion automatique

par spedgreg » 03 nov. 2011, 12:00

Je suis un debutant du coup c'est compliqué à appliquer ce qui est écrit, Sur ma page connexion.inc.php j'avais crée 2 cookie pour plus de sécurité comme ci dessous :

else
            {
                                                                                           
                     // Création des sessions
                       $_SESSION['id']=$row["id"];
                       $_SESSION['id_nom']=$row["Nom_Utilisateur"];
                                                                   
              if(isset($_POST['CB_Connexion_Automatique']))
                    {                                                                                                                                                                       
                           // Création des cookies   
                       $navigateur = (!empty($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : '';
                        $hash_cookie = sha1('aaa'.$username.'bbb'.$password.'ccc'.$navigateur.'ddd');
                                                               
                       // Définition du temps d'expiration des cookies
                         $expiration =empty($_POST["CB_Connexion_Automatique"]) ? 0 : time() + 90 * 24 * 60 * 60;
                       
                       setcookie( 'id', $_SESSION['id'], $expiration, '/');
                         setcookie('connexion_automatique', $hash_cookie, $expiration, '/');
                       }  
                            // Redirection de l'utilisateur
                                 
                                 header("Location: page_membre.php");
           }


Et "xTG" m'a dit que un seul COOKIE suffisait donc $_COOKIE['id']