PHP - utiliser Cookies

stephweb13 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
13stephweb13 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je me permet de vous demander un renseignement SVP,

car j'ai lu pas mal de tutos sur les cookies, mais je comprend toujours pas trop comment bien y sécuriser.

Pour le moment j'ai ces codes :

Dans la page login.php :
<?php
if(isset($_POST['remember'])) { 	// si l'utilisateur coche la case à cocher
	setcookie("cookname", sha1($_SESSION['Auth']['pseudo'] . $_SERVER['REMOTE_ADDR']), time() + 3600 * 24 * 3, "/", '', false, true);
}


Dans la page logout.php :
<?php
setcookie("cookname", sha1($_SESSION['Auth']['pseudo'] . $_SERVER['REMOTE_ADDR']), time() - 3600 * 24 * 3, "/", '', false, true);
unset($_COOKIE['cookname']);


ça fonctionne, mais on m'a dit que ça pouvais être mal sécurisé (sans trop m'expliquer le pourquoi).

Dois-je ajouter dans le header de mon Admin une vérification en plus?
par exemple:
<?php
if(isset($_COOKIE['cookname']) && !isset($_SESSION['Auth'])) {
...


Merci beaucoup
A voir également:

4 réponses

tete0148 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   89
 
Ce que tu fais n'est pas très sécurisé car en connaissant comment tu crées ton cookie, on peut le modifier pour avoir accès au compte d'une autre personne. En effet il suffit que je fasse depuis mon site un sha1 du pseudo d'une personne cible avec son IP et je peux me connecter sur son compte. Le mieux est de générer un cookie avec en valeur une clé unique (unique_id) par exemple, et de stocker en base de donnée le pseudo auquel il correspond comme ça on ne peut pas trouver les cookies des autres utilisateurs (sauf avec beaucoup de chance)
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
L'idéal reste quand même d'utiliser les Sessions, car les données sont stockées coté serveur et non client.
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
Son cookie peut n'être qu'un ID (certes pas sécurisé), et hypothétiquement il stockerait les infos sur son serveur, imitant donc le comportement des sessions.
Mais bon tant qu'à avoir un système qui gère ça à ta place, inclus dans PHP qui plus est...
0
tete0148 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   89
 
Sauf que les sessions expirent au bout de 5 minutes d'inactivité donc on ne peut pas utiliser les cookies pour les "rester connecté"
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223 > tete0148 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention  
 
D'où tu sors ça? Dans les deux cas ($_SESSION ou système fait main) tu n'es pas limité à 5 minutes à moins que tu ne configures le système comme ça.
0
tete0148 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   89 > ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention  
 
par défaut une session ne reste que durant la visite de l'utilisateur
0
13stephweb13 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir.
Merci pour vos réponses.
En faite, mon but est que l'utilisateur puisse cocher une case à cocher "rester connecter" lors du login.

Et j'ai fait plein de recherches, et je n'ai pas trouvé grand chose.
On peut y faire avec les session? comment on fait? merci
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Ah, d'accord, dans ce cas, 2 cookies a longue durée de vie, avec l'un le pseudo (pour retrouver l'utilisateur) et l'autre, avec un hash (MD5 ou SHA, par exemple) du navigateur utilisé (user-agent) et quelques autres informations, histoire de rendre le tout difficilement copiable/usurpable, serait envisageable.
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223 > NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention  
 
Attention toutefois, on ne fait le hash qu'une fois et on ne revérifie pas derrière: je peux changer d'IP toutes les minutes par rotation de proxy, et faire changer (voire retirer) mon user-agent (automatiquement ou pas) via une extension anti-tracking. Pourtant je reste la même personne avec le même compte.
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Le contrôle par User-agent permet d'éviter de se faire "voler" le cookie d'identification.
Je n'ai pas mis l'IP dans la liste des données, car je sais qu'elle peut changer entre 2 passage.
0
13stephweb13 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir.
Ok merci.
Dans la page Login je fait ceci dans le traitement :

<?php
if(isset($_POST['remember'])) {
setcookie("cookname", sha1($_SESSION['Auth']['pseudo'] . uniqid() . $_SERVER['REMOTE_ADDR']), time() + 3600 * 24 * 3, "/", '', false, true);
setcookie("cookmail", sha1($_SESSION['Auth']['mail'] . uniqid() . $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']), time() + 3600 * 24 * 3, "/", '', false, true);
}


Et dans le header de l'admin je rajoute ceci :
<?php
// Sécurité - Cookies. Si un des deux cookie est absent -> Déconnecté !
if(isset($_COOKIE['cookname'])) {
	if(!isset($_COOKIE['cookmail'])) {
		header('Location: logout.php');
		exit();
	}
}
elseif(isset($_COOKIE['cookmail'])) {
	if(!isset($_COOKIE['cookname'])) {
		header('Location: logout.php');
		exit();
	}
}

C'est bien comme ceci qu'il faut faire? (notamment avec le user_agent)?
Merci
0