Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/06/2006, 19h56   #1
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
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.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2006, 16h26   #2
Membre confirmé
 
Avatar de spilliaert
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 20
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 227
Points : 227
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 ?
spilliaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2006, 17h41   #3
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
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.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 12h03   #4
Membre confirmé
 
Avatar de spilliaert
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 20
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 227
Points : 227
heu...oui; le cookie de session est stocké sur le serveurs et le cookie "normal" est stocké chez le client ...
spilliaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 12h11   #5
Membre éprouvé
 
Inscription : février 2005
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2005
Messages : 401
Points : 450
Points : 450
Citation:
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
Sylvain71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 12h15   #6
Membre confirmé
 
Avatar de spilliaert
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 20
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 227
Points : 227
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 ?
spilliaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 12h17   #7
Membre éprouvé
 
Inscription : février 2005
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2005
Messages : 401
Points : 450
Points : 450
Mémoire vive par le navigateur client.
Sylvain71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 12h22   #8
Membre confirmé
 
Avatar de spilliaert
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 20
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 227
Points : 227
mais alors...quand on fait
Code :
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> ?
spilliaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 12h24   #9
Membre éprouvé
 
Inscription : février 2005
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2005
Messages : 401
Points : 450
Points : 450
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
Sylvain71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 12h32   #10
Membre confirmé
 
Avatar de spilliaert
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 20
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 227
Points : 227
Citation:
Envoyé par Sylvain71
Mémoire vive par le navigateur client.
qui ne contient donc que le session_id ?

merci pour la leçon,
spilliaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 13h05   #11
Membre éprouvé
 
Inscription : février 2005
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2005
Messages : 401
Points : 450
Points : 450
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.
Sylvain71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 16h03   #12
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
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 :
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.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 12h47   #13
Membre confirmé
 
Avatar de spilliaert
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 20
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 227
Points : 227
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 !
spilliaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 12h59   #14
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
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 :
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.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 13h44   #15
Membre confirmé
 
Avatar de spilliaert
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 20
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 227
Points : 227
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 :
1
2
3
if (isset($_COOKIE[session_name()])) {
   setcookie(session_name(), '', time()-42000, '/');
}
spilliaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 13h44   #16
Membre éprouvé
 
Inscription : février 2005
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2005
Messages : 401
Points : 450
Points : 450
Citation:
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 !

Citation:
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.


Citation:
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 ...).
Sylvain71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 13h56   #17
Membre confirmé
 
Avatar de spilliaert
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 20
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 227
Points : 227
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
spilliaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 13h57   #18
Membre éprouvé
 
Inscription : février 2005
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2005
Messages : 401
Points : 450
Points : 450
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
Sylvain71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 13h58   #19
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Citation:
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.

Citation:
ç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 :
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.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 14h01   #20
Membre éprouvé
 
Inscription : février 2005
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2005
Messages : 401
Points : 450
Points : 450
Citation:
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
Sylvain71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h53.


 
 
 
 
Partenaires

Hébergement Web