Gestion des cookies de sessions sécurisées

Nouveau WRInaute
Bonjour à tous !

Mon problème relève plus de la logique que de la technique !

Pour accèder à un espace privé, je demande l'identification et je glisse gentiment un cookie sur le PC de l'identifié.
Ce cookie va servir à identifier le visiteur partout sur le site, à chaque chargement de page protégée. Il stocke un code qui correspond à une entrée 'code' dans la base de données des inscrits qui sert à sécurisé l'accès aux données.

Le cookie est donc stocké sur le PC et le code qu'il contient à l'instant T est lui aussi stocké en BDD. Si les deux match alors on récupère l'identifiant du visiteur et toutes ses infos.

Jusqu'ici ce cookie était un cookie de session : la fenêtre une fois fermée, il était supprimé.
-> À la demande des visiteurs, j'ai ajouté une option "se souvenir de moi".
Et là ça se corse !

Le problème :
Si l'user se logue entre temps sur un PC (B) : un nouveau code est généré et mis à jour en base. Il reçoit un cookie.
Admettons à présent que le visiteur se reconnecte le soir sur son PC (A), le cookie de ce PC ne correspond plus à celui de la base et on lui demande de s'identifier à nouveau !

Une solution serait peut-être de mémoriser en BDD les anciens code générés genre les 5 derniers pour que les cookies puissent continuer de "matcher" ?

Mais je me demande si je fais pas fausse route depuis le début !
Comment font les sites de e-commerce pour gérer cette fonction : "se souvenir de moi" ?

Merci à tous
 
WRInaute impliqué
aller je vais essayer d'apporter un début de réponse, d'autres compléteront le sujet est intéressant :
"se souvenir de moi" c'est un cookie et un cookie c'est lié à un ordinateur.
donc rien d'anormal si le soir on lui redemande de cocher la case
par contre dans la gestion de ce que tu stockes dans le cookie c'est sans doute autrement qu'il faudrait que tu fasses :
stocker le login et le mot de passe crypté dans ton cookie par exemple :
md5($login."|".$motdepasse."|".$paraphrase);
et ainsi sur chaque page sécurisé si cookie alors check du md5 avec ce que tu en bases sinon authent
et recalcule de la clef de hash si seulement il change son password par exemple
 
WRInaute accro
>> Si l'user se logue entre temps sur un PC (B) : un nouveau code est généré et mis à jour en base.

Attribut dés le début dans ton architecture 1 Numéro définitif et unique pour chaque utilisateur. (Le Numéro peut etre composé de chiffres et de lettre, voir utiliser le nom de l'utilisateur si il est unique). Crypte et décrypte ( avec md5 par exemple) ce Numéro pour l'utiliser à toute les sauces dans tes différentes applications (logs, cookies, sessions..)
 
Nouveau WRInaute
Merci à tous !

Intéressant comme retour.
En fait pour ma part, j'actualisais le code chaque jour de façon à garantir une sécurité max. Maintenant c'est aussi ça qui fait que tout se complique visiblement.

En effet KOogar, si on attribue une clef unique qui n'est pas mise à jour, c'est bien plus simple. Si on me dit que ce cas de figure est aussi sûr que ma version pourquoi pas ! Après tout ce n'est pas non plus un site qui gère de l'argent.

Donc ok pour l'idée unique. Jusqu'ici je m'appuyait sur un pass généré avec une le code suivant :
Code:
$chrs = 8 ;
  $pwd = ""  ;
  mt_srand ((double) microtime() * 1000000);
  while (strlen($pwd)<$chrs)
  {
    $chr = chr(mt_rand (0,255));
    if (eregi("^[a-hj-km-np-z2-9]$", $chr))
      $pwd = $pwd.$chr;
	  $pasw = $pwd.$clef;
  };

L'encodage md5 j'en ai déjà entendu parler mais je sais pas trop comment ça s'applique, en quoi il est fiable. Je vais tacher de me documenter la dessus avec de la doc php.

Bon bon finalement je vais voir mes exigences à la baisse mais je pense que c'est effectivement plus souple ainsi ;)
 
WRInaute accro
Un jeu d'enfant vu tes connaissances.. Seul le password est haché avec md5 et pour extraire les enregistrements une simple lecture suffira:

Code:
$req = "SELECT *
        FROM table
        WHERE login='$login'
        AND password=".md5($pass)."
        ";
 
WRInaute discret
Ou encore plus sécurié :
-> Ajout d'une phrase clé (dans ta config, t'es le seul a connaitre
-> md5 du tout

$config_phrase = "Je suis le roi du monde, et je fait ce que je veux avec mon site !!!";
$pass_cookie = md5($pass.$config_phrase);

Tu stock dans le cookie, avec son pseudo.

Lors de l'identification :
1) Chercher le pseudo dans la base
2) Voir si le pass correspond avec le même encodage que $pass_cookie

On peut aussi travailler avec une session ... mais encore, faut voir l'utilité de la protection (est-ce un secret d'état ?)

Philippe
 
Discussions similaires
Haut