Autologin Cookie

lux
Eléphant du PHP | 372 Messages

07 juin 2007, 15:17

Hello tout le monde.
J'ai une partie admin pour mon site, qui est sécurisé par Session. Donc la aucun problème.
Je pensais par contre ajouter une case à cocher "se souvenir de moi". (Autologin donc)
J'ai réussi à implémenter ceci, sans trop de problème, en envoyant un cookie, le script marche, gère même la deconnexion de la session et de la destruction du cookie. Je me suis tout de même renseigné par la suite sur la sécurité de cette méthode.

Il me semble que quoi que je fasse, le cookie peut-être récupéré et qqn pourra se loggeur à la place de l'utilisateur initial.

Je peux mettre dans mon cookie :
- soit le login et le mot de passe (encrypté md5)
- soit un string crée avec rand()
Je peux ensuite faire un contrôle avec une insertion en BDD de ce string, ou de l'ID de session, ou de ce que vous voulez ...

MAIS quoi qu'il se passe, si qqn récupère le contenu du cookie a un moment ou un autre, il pourra renvoyer le contenu du cookie et entrer dans la console admin, vu que j'ai un autologin quand qqn se connecte avec les données de ce cookie.
//Autologin
if (isset($_COOKIE['session']) && $_COOKIE['session'] == '$controle')
	{
		$_SESSION['auth'] = 'ok'; //On autorise la session
	}

//$controle = ce qu'on veut, enfin, ce qu'on a mis dans le cookie, que ce soit mot de passe, login, chaine au hasard

Donc je fais quoi ? J'abandonne l'idée de l'autologin, ou y a-t'il un moyen de sécuriser ça a fond ?

Merci d'avance !

ViPHP
ViPHP | 928 Messages

07 juin 2007, 15:26

Dans tous les cas, si un utilisateur A a un cookie permettant une connexion automatique, et que l'utilisateur B vole ce cookie, B pourra se loggué à la place de A. A toi de faire de faire en sorte que B puisse pas récupérer le cookie de A, simplement en évitant les failles XSS.

Si tu veux davantage de sécurité pour tes utilisateurs :
1) Ne te contente pas d'un MD5() pour les mots de passe, fait plutot : md5('mot_de_passe' . 'grain_secret'); où 'grain_secret" est une chaine de caractère stoquée sur ton site. Comme ça si B vole le cookie de A, même avec son code crypté il ne pourra jamais découvrir le code original.
2) Ajoute par exemple une vérification avec IP : créé une table sql "autologin" avec en champs l'ID du membre, son adresse IP, un hash unique qui sera stocké dans le cookie et une date (facultatif). Lorsque le membre coche la case "se souvenir de moi", tu stocks dans ta table "autologin" son IP, un hash qui tu envoies aussi dans le cookie et son ID. Lors de sa future visite, tu vérifies si l'IP correspond à l'ID et au hash dans le cookie. Le cas échéant tu logs la tentative de connexion, ça pourra te servir à tracer d'éventuels pirates parmi tes membres. Bien sur cette méthode présupose que l'IP du membre ne varie pas trop (genre pas à chaque connexion ...).

lux
Eléphant du PHP | 372 Messages

07 juin 2007, 16:00

Merci pour le conseil pour le md5, je vais voir ce que je peux faire.

Pour le stockage des IP, bof bof. Moi mon provider me fait changer toutes les 24h d'IP automatiquement, puis y a les déconnexions, et les gens derrière des proxy ...

Mais ça change rien si je stocke un mot de passe en md5, ou si je stocke tout simplement un string quelconque. (pour l'instant je vérifiais juste que dans le cookie il y avait un 'ok') ?

Pour les failles XSS, je dois encore regarder ... pas facile tout ça

lux
Eléphant du PHP | 372 Messages

08 juin 2007, 14:24

Mais ça change rien si je stocke un mot de passe en md5, ou si je stocke tout simplement un string quelconque. (pour l'instant je vérifiais juste que dans le cookie il y avait un 'ok') ?
J'ai regardé mes cookies provenant d'autres sites, souvent ils stockent un string quelconque, ou des mots de passe en md5. Je suppose que donc c'est le chemin à suivre.