PHP - utiliser Cookies

Fermé
stephweb13 Messages postés 9 Date d'inscription vendredi 30 septembre 2011 Statut Membre Dernière intervention 11 mai 2020 - 19 mai 2015 à 10:19
13stephweb13 Messages postés 48 Date d'inscription mardi 29 novembre 2011 Statut Membre Dernière intervention 9 mai 2018 - 1 juin 2015 à 23:35
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 mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
27 mai 2015 à 21:21
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
27 mai 2015 à 21:43
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 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
27 mai 2015 à 22:09
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 mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89
27 mai 2015 à 22:16
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 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225 > tete0148 Messages postés 413 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017
28 mai 2015 à 21:19
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 mercredi 19 décembre 2012 Statut Membre Dernière intervention 15 juin 2017 89 > ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021
31 mai 2015 à 22:15
par défaut une session ne reste que durant la visite de l'utilisateur
0
13stephweb13 Messages postés 48 Date d'inscription mardi 29 novembre 2011 Statut Membre Dernière intervention 9 mai 2018
27 mai 2015 à 22:16
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
28 mai 2015 à 21:36
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 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225 > NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024
28 mai 2015 à 22:51
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
29 mai 2015 à 19:37
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 mardi 29 novembre 2011 Statut Membre Dernière intervention 9 mai 2018
1 juin 2015 à 23:35
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