Consultez la formation SEO spéciale Wordpress
par WebRankInfo / Ranking Metrics

Messages: 25

Enregistré le: 23 Déc 2003

Message le Lun Mar 03, 2008 15:47

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
Haut
7 Réponses
Messages: 963

Enregistré le: 5 Aoû 2003

Message le Lun Mar 03, 2008 16:10

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
Haut
Messages: 4566

Enregistré le: 16 Nov 2004

Message le Lun Mar 03, 2008 17:18

>> 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..)
Haut
Messages: 25

Enregistré le: 23 Déc 2003

Message le Jeu Mar 13, 2008 1:14

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: Tout sélectionner
$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 ;)
Haut
Messages: 4566

Enregistré le: 16 Nov 2004

Message le Jeu Mar 13, 2008 2:51

Un jeu d'enfant vu tes connaissances.. Seul le password est haché avec md5 et pour extraire les enregistrements une simple lecture suffira:

Code: Tout sélectionner
$req = "SELECT *
        FROM table
        WHERE login='$login'
        AND password=".md5($pass)."
        ";
Haut
Messages: 243

Enregistré le: 17 Avr 2003

Message le Jeu Mar 13, 2008 10:29

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
Haut
Messages: 4566

Enregistré le: 16 Nov 2004

Message le Jeu Mar 13, 2008 11:18

slt philippe

j'savais pas que tu surfais aussi sur WRI, Im very glad to see you here :D
Haut
Messages: 58

Enregistré le: 21 Mar 2005

Message le Jeu Mar 13, 2008 11:26

Un article pas mal à ce sujet : http://phpsec.org/projects/guide/fr/4.html
Haut

Formation recommandée sur ce thème :

Formation SEO spéciale Wordpress : apprenez à optimiser le référencement naturel d'un site fait avec Wordpress... Formation Ranking Metrics animée par un expert SEO / Wordpress.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.