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 29/05/2006, 15h48   #1
Membre du Club
 
Avatar de july
 
Inscription : 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 : 54
Points : 54
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 :
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 :
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
july est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2006, 16h10   #2
Membre du Club
 
Avatar de july
 
Inscription : 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 : 54
Points : 54
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 :
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
july est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2006, 16h49   #3
Membre du Club
 
Avatar de july
 
Inscription : 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 : 54
Points : 54
Personne ne sait ???

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

Merci encore
july est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2006, 17h47   #4
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
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.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2006, 08h29   #5
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
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+
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2006, 14h49   #6
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
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.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2006, 17h00   #7
Membre du Club
 
Avatar de july
 
Inscription : 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 : 54
Points : 54
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
july est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2006, 17h23   #8
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
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

Lithium : ORM ActiveRecord PHP5 extrêmement léger
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2006, 21h22   #9
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:
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.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 09h48   #10
Membre du Club
 
Avatar de july
 
Inscription : 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 : 54
Points : 54
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
july est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 09h56   #11
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
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

Lithium : ORM ActiveRecord PHP5 extrêmement léger
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 18h25   #12
Membre chevronné
 
Avatar de Hervé Saladin
 
Développeur Web
Inscription : décembre 2004
Messages : 636
Détails du profil
Informations personnelles :
Âge : 30

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2004
Messages : 636
Points : 689
Points : 689
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.
__________________
Ne cliquez pas sur ce lien
Hervé Saladin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2006, 04h09   #13
Membre chevronné
 
Avatar de kankrelune
 
Inscription : décembre 2005
Messages : 766
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 766
Points : 745
Points : 745
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 :
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 :
1
2
 
$_SESSION['checkid'] = getUserCheckId();
Sur chaque page...

Code :
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... .. .
kankrelune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2006, 11h25   #14
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
Citation:
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

Lithium : ORM ActiveRecord PHP5 extrêmement léger
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2006, 16h06   #15
Membre chevronné
 
Avatar de kankrelune
 
Inscription : décembre 2005
Messages : 766
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 766
Points : 745
Points : 745
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°
kankrelune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 10h23   #16
Membre du Club
 
Avatar de july
 
Inscription : 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 : 54
Points : 54
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...
july est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 10h27   #17
Membre du Club
 
Avatar de july
 
Inscription : 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 : 54
Points : 54
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 !
july est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 10h30   #18
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
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

Lithium : ORM ActiveRecord PHP5 extrêmement léger
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 11h02   #19
Membre du Club
 
Avatar de july
 
Inscription : 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 : 54
Points : 54
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é
july est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h46.


 
 
 
 
Partenaires

Hébergement Web