IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Cookies] Login membre, protection vol de session


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut [Cookies] Login membre, protection vol de session
    Bonjour,
    Me revoila !! lol

    En fait, j'ai un dernier problème tout bete : j'ai mis en place (enfin du moins j'espère !) une protection contre le vol de session (avec la méthode décrite par Kioob) et j'aimerai faire des tests mais je ne sais pas comment faire !

    J'ai essayé d'aller dans le cookie sur ma machine changer la valeur du n° que j'ai généré mais ca ne fait rien... Alors erreur de code ou erreur de test ?

    Je vous mets mon code :

    Lorsque l'utilisateur se connecte je crée le premier cookie.
    Ensuite, on teste lorsque l'utilisateur est connecté et qu'il change de page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if($connecte){
     // On compare l'id du cookie avec l'id de la session
       if($_COOKIE['id_aleatoire'] != $_SESSION['id_aleatoire']){
     
        // Si les deux valeurs sont différentes, on renvoie vers l'accueil et on détruit la session
        login_out();
        header('location: index.php?rub_id=1&ss_rub_id=1');
     
       } else {
           // On génère une nouvelle valeur de cookie et dans la variable session
           generate_cookie();
       }
    }
    Je vous mets également la fonction qui génère le cookie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       // On définit la durée du cookie tjs en secondes
       // Ce cookie expirera dans un jour, puisque l'on ajoute la date du jour et 24*3600
       $expire = time()+24*3600;
     
       // On crée un nb aléatoire que l'on stocke en session et dans le cookie
       $nb_aletoire = rand();
     
       // On le stocke en session
       $_SESSION['id_aleatoire'] = $nb_aletoire;
     
       // On envoi le nom du paramètre à stocker, la valeur du paramètre et la date d'expiration du cookie
       // On transmet un numéro aléatoire qui permet de vérifier que l'utilisateur est valide
       setcookie("id_aleatoire",$nb_aletoire,$expire);
    J'ai pense faire un autre test c'est à dire en stockant dans la bdd le n° aléatoire. Mais je ne saurai pas si ca marche pour un cookie..

    Merci encore par avance

  2. #2
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Bon alors j'ai fait le test avec une base de données et.. ca fonctionne !

    Le problème étant que j'aimerai mieu utiliser un cookie car je pense que ca serait plus sécurisé (une bdd ca se vole, un cookie pas à ma connaissance).

    Je vous explique le test que j'ai effectué :
    - je me suis connectée, dans la bdd un n° aléatoire à donc été enregistré
    - je suis allée dans ma base et j'ai changé ce n°
    - je suis retournée sous FireFox et j'ai changé de page
    - ma session a été détruite puisque le n° enregistré dans ma session n'était pas celui de la bdd !
    PARFAIT !

    Voici le code :
    La vérification est la même à part que je ne fais plus $_COOKIE['id_aleatoire'] mais je vais dans la bdd chercher cette valeur.
    Par contre la fonction generate_cookie à changée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function generate_cookie($db){
     
       // On crée un nb aléatoire que l'on stocke en session et dans le cookie
       $nb_aletoire = rand();
     
       // On le stocke en session
       $_SESSION['id_aleatoire'] = $nb_aletoire;
     
     
       $result = $db->execRequest("INSERT INTO session (id_user,date,nb_aleatoire) VALUES ('".$_SESSION['id_user']."','".date('Y-m-d H:i:s')."','".$nb_aletoire."')");
     
    }
    Quelqu'un connait alors le pb avec les cookies ?
    Merci encore

  3. #3
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Personne ne sait ???

    Comment faites vous alors pour lutter contre le vol se session ?

    Merci encore

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bah moi je fais plus rien, j'ai viré tous les scripts dans le genre et je passe en https (ssl ?) dès que j'ai deux semaines de libre (ça va pas être coton, j'ignore tout du problème).
    C'est pas parce que j'ai tort que vous avez raison.

  5. #5
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    Salut

    http://www.developpez.net/forums/sho...=144573&page=2

    lis la page 2 et 3 (voire tout)

    Tu apprendras que ce que tu as fait (sans le $_COOKIE je parle) ne sert à rien.
    Fais marcher ton cookie, ou fait rien.

    A+
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Salut Wanania,

    Juste en deux mots : comme j'ai décidé de passer l'espace membre de mon site en ssl, comment je dois faire ? Je sais que l'option est dispo chez ovh.

    Je demande pas des informations complètes, mais c'est tout noir et je voudrais juste quelques pistes pour commencer à m'orienter sur le pourquoi du comment afin de gagner du temps le moment venu. C'est difficile ou quoi ? ça peut prendre combien de temps ? ça implique des changements d'url ou choses comme ça... ?
    C'est pas parce que j'ai tort que vous avez raison.

  7. #7
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Bonjour,

    wamania j'avais vu le topic dont tu me parlais mais il ne résout pas mon problème. Le code de mon deuxième POST n'est biensur pas efficace ! C'était juste pour vérifier si mon code de vérification fonctionnait ! Apparement, oui donc mon problème provient bien du cookie.

    Oui je connais SSL mais je ne souhaite pas l'utiliser.

    J'aimerai savoir si quelqu'un utilise les cookies pour se protéger du vol de session ? Ou si quelqu'un voit une erreur dans le code de mon premier POST ?

    Merci encore

  8. #8
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    psychoBob, je pense que ça pourrait justifier un post à part, que tout le monde puisse en discuter.
    Enfin, à mon souvenir, si le serveur est OK, il suffit juste de remplacer https dans les lien.
    Donc si tes chemin sont en absolus, faut les revoir, sinon pas de soucis

    july, pour ton cookie, c'est bizarre je vois rien de faux.
    tu peux decrire mieux ton pb et ce qui se passe exactement?
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    je pense que ça pourrait justifier un post à part, que tout le monde puisse en discuter.
    Bon bah dès que je suis sur le morceau, j'ouvre ça, ça va être corsé.Je vois déjà le titre : Installer son admin en ssl pour les nuls.

    Dans quel forum à ton avis Wamania, que je puisse me situer ?
    C'est pas parce que j'ai tort que vous avez raison.

  10. #10
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Bonjour,

    Merci de vos réponses !

    Citation Envoyé par wamania
    july, pour ton cookie, c'est bizarre je vois rien de faux.
    tu peux decrire mieux ton pb et ce qui se passe exactement?
    En fait je ne sais pas si c'est faux ou pas MAIS (il y a tjs un mais ) j'ai voulu faire des tests pour voir si ça fonctionnait.
    Pour cela j'ai utilisé cette méthode :
    - j'ouvre mon site avec FireFox
    - je m'indentifie et je suis connectée
    - je vais voir dans le dossier de FF et il y a un bien un cookie de créé.
    - je le modifie (en fait le change le numéro aléatoire que j'avais généré)
    - je retourne sous FF et je clique pour demander un page

    Normalement, je devrais etre déconnectée puisque l'id n'est plus le même dans le cookie que dans $_SESSION mais en fait non ! Il affiche la page demandée.

    Alors ma question était : est ce que j'ai une erreur de code OU une erreur dans mon test ?

    Merci encore

  11. #11
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    le test me semble bon.
    As-tu essayé de faire un echo du cookie lorsque tu rappelles la page, apres la modif?
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  12. #12
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    mmmmh, je suis pas sûr que firefox aille ouvrir le fichier du cookie et lire son contenu a CHAQUE requete ...
    Peut être qu'il le garde en mémoire un certain temps ???
    Je dis ça, c'est une hypothèse, je sais pas comment firefox gère les cookies concrètement, et en plus ça risque de varier d'un navigateur à l'autre.
    Mon conseil : re-fais le même test, mais en plus tu fais afficher par ton script PHP la valeur du cookie de session dans une page HTML, comme ça tu verras si la modif que ta as faite à la main dans ton cookie à été prise en compte par firefox.

  13. #13
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par july
    Le problème étant que j'aimerai mieu utiliser un cookie car je pense que ca serait plus sécurisé (une bdd ca se vole, un cookie pas à ma connaissance).


    Ah bon... d'où tu sors ça... .. ?

    Un cookie ça se vole bien plus facilement que le contenu d'un base de données... qui plus est un cooki c'est un simple fichier texte sur le pc de l'internaute... donc inutile de dire que ça se modifi... $_COOKIE c'est à traiter comme $_GET... avec précaution... .. .

    ensuite le gars qui n'accepte pas les cookies risque d'être enmerdé... .. .

    Voici comment moi je fais... .. .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    function getUserCheckId()
    {
       $checkid = $_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'];
     
       if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) 
          $checkid .= $_SERVER['HTTP_ACCEPT_LANGUAGE'];
       if(isset($_SERVER['HTTP_ACCEPT_CHARSET'])) 
          $checkid .= $_SERVER['HTTP_ACCEPT_CHARSET'];
       if(isset($_ENV['USERDOMAIN'])) 
          $checkid .= $_ENV['USERDOMAIN'];
       if(isset($_ENV['COMPUTERNAME'])) 
          $checkid .= $_ENV['COMPUTERNAME'];
       if(isset($_ENV['PROCESSOR_IDENTIFIER'])) 
          $checkid .= $_ENV['PROCESSOR_IDENTIFIER'];
       if(isset($_ENV['OS']))
          $checkid .= $_ENV['OS'];
     
       return md5($checkid);
    }
    à la connection...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['checkid'] = getUserCheckId();
    Sur chaque page...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if($_SESSION['checkid'] != getUserCheckId())
    {
        $user->cleanSession();
        header('Location: '.SITE_URL.'index.php');
        exit();
    }
    @ tchaOo°

    ps : il est utile de mettre en place cette méthode uniquement pour les utilisateurs ayant des droits d'administration... pour les membres lambda sauf cas particulier ça n'est pas utile... .. .

  14. #14
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    ps : il est utile de mettre en place cette méthode uniquement pour les utilisateurs ayant des droits d'administration... pour les membres lambda sauf cas particulier ça n'est pas utile... .. .
    je dirais meme plus, c'est une technique valable, mais surtout pas pour l'utilisateur lambda.
    ça avait été discuté dans un topic de psychoBob, ces propriétés sont peu fiables à cause des FAI comme AOL, ou des proxys d'entreprise/université...
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  15. #15
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par wamania
    je dirais meme plus, c'est une technique valable, mais surtout pas pour l'utilisateur lambda.
    ça avait été discuté dans un topic de psychoBob, ces propriétés sont peu fiables à cause des FAI comme AOL, ou des proxys d'entreprise/université...

    Oui je sais c'est pour ça que j'ais cru bon de préciser... en plus du problème d'Ip dynamique ça alourdis un peu plus le script pour rien... à moins qu'il faille protéger les membre par exemple en raison de données sensibles stockées sur le compte à ce moment là il est possible de modifier légèrement cette technique pour qu'elle soit un peu plus "coulante"... .. .

    @ tchaOo°

  16. #16
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par Hervé Saladin
    mmmmh, je suis pas sûr que firefox aille ouvrir le fichier du cookie et lire son contenu a CHAQUE requete ...
    Peut être qu'il le garde en mémoire un certain temps ???
    C'est ce que j'ai pensé puisque quand je fais un réaffichage, il n'affiche pas la valeur que j'ai modifiée dans le cookie !

    Quelqu'un sait ? Car si FireFox ne lis pas le cookie à chaque requete ma méthode est inutile...

  17. #17
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par kankrelune


    Ah bon... d'où tu sors ça... .. ?

    Un cookie ça se vole bien plus facilement que le contenu d'un base de données... qui plus est un cooki c'est un simple fichier texte sur le pc de l'internaute... donc inutile de dire que ça se modifi... $_COOKIE c'est à traiter comme $_GET... avec précaution... .. .
    Merci beaucoup de ton code déja !
    Ensuite, oui un cookie se vole facilement mais je voulais dire que le pirate doit voler à CHAQUE requete le cookie car j'y stocke un numéro différent !
    Je me suis mal exprimée !

  18. #18
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    ta méthode reste utile, c'est juste le test qui ne le révèle pas.
    Meme si Firefox n'ecrit pas physiquement le cookie à chaque fois, si tu fais un setcookie, en ram ou sur fichier, il le modifiera.
    Pour faire un test valable, crée un script sur le meme domaine qui se chargerais de modifier "proprement" le cookie comme tu l'avais fait à la main, cette modif là sera prise en compte par firefox, indépendamment de l'endroit ou est stocké le cookie.
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  19. #19
    Membre régulier
    Avatar de july
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Ok merci c'est sympa !

    Je considère donc que ma méthode est efficace et que c'est mon test qui pose problème.

    Merci à tous de m'avoir aidé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.2] Sessions "cookie-based" et vol de session "hijacking"
    Par Doonge dans le forum Langage
    Réponses: 18
    Dernier message: 02/09/2011, 15h44
  2. [Cookies] Test de vol de session
    Par freesurfer dans le forum Langage
    Réponses: 12
    Dernier message: 20/10/2006, 13h55
  3. [Cookies] C'est quoi un vol de session ?
    Par psychoBob dans le forum Langage
    Réponses: 45
    Dernier message: 28/05/2006, 22h11
  4. [Cookies] problème cookie login automatique
    Par t-die dans le forum Langage
    Réponses: 1
    Dernier message: 26/01/2006, 16h48
  5. [Cookies] Chaque page démarre une nouvelle session
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 21/01/2006, 21h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo