Gestion des cookies de sessions sécurisées

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Lexarino, 3 Mars 2008.

  1. Lexarino
    Lexarino Nouveau WRInaute
    Inscrit:
    23 Décembre 2003
    Messages:
    25
    J'aime reçus:
    0
    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
     
  2. julienr
    julienr WRInaute impliqué
    Inscrit:
    5 Août 2003
    Messages:
    963
    J'aime reçus:
    0
    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
     
  3. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 552
    J'aime reçus:
    0
    >> 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..)
     
  4. Lexarino
    Lexarino Nouveau WRInaute
    Inscrit:
    23 Décembre 2003
    Messages:
    25
    J'aime reçus:
    0
    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 ;)
     
  5. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 552
    J'aime reçus:
    0
    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)."
            "; 
     
  6. lafosca
    lafosca WRInaute discret
    Inscrit:
    17 Avril 2003
    Messages:
    242
    J'aime reçus:
    0
    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
     
  7. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 552
    J'aime reçus:
    0
    slt philippe

    j'savais pas que tu surfais aussi sur WRI, Im very glad to see you here :D
     
  8. Bobulum
    Bobulum WRInaute discret
    Inscrit:
    21 Mars 2005
    Messages:
    58
    J'aime reçus:
    0