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] Antivol de session: comparatif cookie/cookie de session


Sujet :

Langage PHP

  1. #1
    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 [Cookies] Antivol de session: comparatif cookie/cookie de session
    Bonjour,

    Il y a eu pas mal de posts sur la manière de déconnecter un utilisateur et le hacker en cas de vol de session.

    L'idée était donc, si j'avais bien compris, de créer un numéro md5() et de le passer en session, ainsi que dans un cookie.
    Ce numéro change à chaque page et est updaté dans la session et dans le cookie.
    Puis à chaque nouvelle page, on compare le numéro dans la session et celui dans le cookie.
    Si c'est identique, c'est bon, sinon on déconnecte tout le monde:
    Si un hacker sniffe une session, il récupère certe le md5(), mais lorsqu'il affiche la page, il va créer un cookie qui aura un md5() aléatoire différent de celui dans la session. ==> il est déconnecté.

    Bon si je me suis pas trompé sur ce qui précède, voyons cela :

    - Je ne passe mes variables de session que dans des cookies et pas dans les urls (il parait que c'est plus sur).
    - Je ne peux donc pas passer le md5() en cookie et dans l'url comportant les paramètres de session (paramètres cachées ou non, à priori ça revient au même).
    - Je dois donc passer le md5() dans un cookie ET dans le cookie de session.

    Question :
    Si le pirate sniffe le cookie de session (ou la session ?), a-t'il aussi à porté de main le cookie comportant le md5() ?


    (j'ai pas beaucoup travaillé avec les sessions encore, alors j'espère que je dis pas des énormités. Le cas échant, veuillez me reprendre)
    C'est pas parce que j'ai tort que vous avez raison.

  2. #2
    Membre averti Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par psychoBob
    Question :
    Si le pirate sniffe le cookie de session (ou la session ?), a-t'il aussi à porté de main le cookie comportant le md5() ?
    non; puisque le cookie est stocké sur l'ordinateur en local du client. Le pirate n'y a pas accès ...Ou ais-je mal compris ta question ?

  3. #3
    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
    Bein j'en sais rien, y 'a-t'il une différence entre un cookie et un cookie de session ?
    C'est pas parce que j'ai tort que vous avez raison.

  4. #4
    Membre averti Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 307
    Points
    307
    Par défaut
    heu...oui; le cookie de session est stocké sur le serveurs et le cookie "normal" est stocké chez le client ...

  5. #5
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Points : 532
    Points
    532
    Par défaut
    spilliaert heu...oui; le cookie de session est stocké sur le serveurs et le cookie "normal" est stocké chez le client ...
    Heuu non, le cookie de session arrive bien chez le client mais ne contient que son session_id. C'est les données associées qui restent sur le serveur.

    La différence avec un cookie normal je crois que c'est le "stockage". Le cookie "normal" est enregistré dans un fichier texte tandis que le cookie de session est stocké en mémoire.

    Je ne suis jamais sur à 100% quand je parle des sessions mais il me semble bien que c'est plutot comme ça que ça marche

  6. #6
    Membre averti Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par Sylvain71
    Le cookie "normal" est enregistré dans un fichier texte tandis que le cookie de session est stocké en mémoire.
    Quelle mémoire ? serveur ?

  7. #7
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Points : 532
    Points
    532
    Par défaut
    Mémoire vive par le navigateur client.

  8. #8
    Membre averti Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 307
    Points
    307
    Par défaut
    mais alors...quand on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_SESSION['blabla']
    on fait une requête au client ? ou une copie est stockée sur le serveur ? et à quoi sert le dossier /temp du serveur avec tous ces fichiers sess_<id_de_session> ?

  9. #9
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Points : 532
    Points
    532
    Par défaut
    En fait, le serveur envoi au client un id de session.
    Cet id sera enregistré en mémoire.
    Et dès que le client va faire une requete au serveur, cet id sera envoyé dans l'entete.

    Le serveur va donc aller ouvrir le fichier correspondant à cet identifiant dans /temp ou je ne sais trop quel dossier.
    Et c'est là que seront enregistrées et chargées les valeurs telles que $_SESSION['blabla'].

    Grossierement c'est ça. Et si c'est pas ça, qu'on me pende haut et court :p

  10. #10
    Membre averti Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par Sylvain71
    Mémoire vive par le navigateur client.
    qui ne contient donc que le session_id ?

    merci pour la leçon,

  11. #11
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Points : 532
    Points
    532
    Par défaut
    Voila

    Pour voir ce qui se passe, une bonne solution serait d'afficher l'entete HTTP en début de chaque page sur un site de test.
    là on verrait vraiment bien ce qui transite pour les cookies et sessions.

  12. #12
    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
    Ok, je vois que l'on a squaté mon post, tant mieux j'ai lu tout ça c'était bien intéressant.
    Comme je suis sans doute le plus nul question session (je les utilise pour la première fois et le site est pas en production), je repose cette question :

    Les cookies de sessions ne sont pas des cookies normaux, oui ou non ?

    Je précise que sur mon site j'initialise la session comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    if( isset( $_COOKIE[ session_name() ] ) )
    {
        session_start();
    }
    ?>
    Donc là pourtant, malgré ce que vous dites, ou ce que j'ai compris que vous disiez, je teste bien si un $_COOKIE existe comme je le ferai pour n'importe quel cookie banal.

    Parce que le but, je le réprécise c'est de faire un test entre un numéro dans le cookie de session, et un numéro dans un autre cookie "normal".

    Alors si je fais et que le pirate peut indifféremment sniffer et récuperer les deux de la même manière, c'est idiot.

    Oui je sais je suis pas mal à coté de la plaque dans ce que je dis là, mais ma question a justement pour but d'y voir plus clair.
    C'est pas parce que j'ai tort que vous avez raison.

  13. #13
    Membre averti Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 307
    Points
    307
    Par défaut
    comme tu peux le voir plus haut, les valeurs des variables des cookies sont chez le client, les valeurs des variables de session sont chez le serveur...donc, on n'y accède pas de la même manière !

  14. #14
    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
    D'accord alors je n'arrive pas à comprendre un point :

    Je ne veux pas qu'il y ait d'id de session dans l'url.
    Donc j'initialise les sessions ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    if( isset( $_COOKIE[ session_name() ] ) )
    {
        session_start();
    }
    ?>
    Mais là, les variables de session, elles sont où ? Egalement sur le serveur où dans un cookie chez le client ?
    A quoi sert sinon le $_cookie[session_name] ? A forcer l'id de session dans le cookie chez le client tandis que les variables de sessions restent de toute façon dans le serveur ?
    C'est pas parce que j'ai tort que vous avez raison.

  15. #15
    Membre averti Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par psychoBob
    A quoi sert sinon le $_cookie[session_name] ? A forcer l'id de session dans le cookie chez le client tandis que les variables de sessions restent de toute façon dans le serveur ?
    non, mais je ne suis pas sûr...je crois que quand tu fais $-COOKIE[session_name()], php vérifie qu'une session est déjà ouverte pour ce client, donc qu'un cookie de session existe...ça sert par exemple, si tu veux détruire la session, et pas seulement les données qu'elle contient;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (isset($_COOKIE[session_name()])) {
       setcookie(session_name(), '', time()-42000, '/');
    }

  16. #16
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Points : 532
    Points
    532
    Par défaut
    Mais là, les variables de session, elles sont où ? Egalement sur le serveur où dans un cookie chez le client ?
    Sur le serveur ! C'est l'intéret des sessions !

    A quoi sert sinon le $_cookie[session_name] ?
    A créer un cookie dont le nom est l'identifiant de la session. Pas de forçage ou je ne sais quoi.


    Je ne veux pas qu'il y ait d'id de session dans l'url.
    Donc j'initialise les sessions ainsi :
    Code :

    <?php if( isset( $_COOKIE[ session_name() ] ) ) { session_start(); } ?>
    ça n'a rien à voir L'identifiant de session dans l'url ça vient de la configuration de PHP. ça n'a aucun lien avec ton $_COOKIE.

    Tiens un petit truc au passage si ça peut t'aider : sache que le contenu d'un cookie ne sera consultable qu'après rechargement de la page (il faut que le client envoi ce contenu dans l'entete d'une requete ...).

  17. #17
    Membre averti Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par Sylvain71
    A créer un cookie dont le nom est l'identifiant de la session. Pas de forçage ou je ne sais quoi.
    $_COOKIE[session_name()] est le cookie de session, pas un cookie "normal" ...la preuve1 er exemple, qui détruit le cookie de session

  18. #18
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Points : 532
    Points
    532
    Par défaut
    Ah et bien ok autant pour moi
    Je pensais que les 2 mécanismes étaient bien dissociés.
    Je vais me pendre de ce pas :p

  19. #19
    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
    A créer un cookie dont le nom est l'identifiant de la session.
    Mais puisqu'un cookie de session n'est pas comme un cookie normal si j'en crois Spilliaert, pourquoi ont-ils les mêmes noms ? On ne s'y retrouve pas.

    ça n'a rien à voir L'identifiant de session dans l'url ça vient de la configuration de PHP. ça n'a aucun lien avec ton $_COOKIE.
    J'ai fait le code de test pour que les gens dont les navigateurs n'acceptent pas les cookies ne puissent pas utiliser le service, car je ne veux pas qu'il y ait d'id de session dans l'url (je n'ai pas réussi à les masquer et je crois que c'est plus sur en cookie que par l'url). A te lire, même ceux dont les navigateurs refusent les cookies pourront quand même utiliser le site, margré le code que je remet ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    if( isset( $_COOKIE[ session_name() ] ) )
    {
        session_start();
    }
    ?>
    C'est pas parce que j'ai tort que vous avez raison.

  20. #20
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Points : 532
    Points
    532
    Par défaut
    Mais puisqu'un cookie de session n'est pas comme un cookie normal si j'en crois Spilliaert, pourquoi ont-ils les mêmes noms ? On ne s'y retrouve pas.
    lol oui effectivement c'est ce qui m'a troublé aussi D'où mon erreur ci-dessus.
    Et bien ... soit je me suis aussi trompé sur le fait que les cookies de session étaient gerés un peu différemment des autres, soit c'est PHP qui fait en sorte qu'ils s'utilisent de la même manière d'une façon transparente.

    Je ne peux te conseiller qu'une chose si le sujet t'interesse à ce point, c'est d'aller lire la doc PHP sur les sessions

    Elle te dira surement beaucoup moins d'aneries que nous

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/02/2019, 19h16
  2. [Oracle9i] Sessions et/ou cookies en PL/SQL?
    Par NPortmann dans le forum PL/SQL
    Réponses: 2
    Dernier message: 22/02/2008, 12h00
  3. Réponses: 8
    Dernier message: 05/09/2007, 11h20
  4. [Cookies] Les Sessions et les cookies
    Par naima2005 dans le forum Langage
    Réponses: 1
    Dernier message: 28/12/2006, 12h06
  5. [Cookies] stocker le nom de la session dans un cookie
    Par agencep dans le forum Langage
    Réponses: 10
    Dernier message: 23/02/2006, 15h18

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