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 20/06/2006, 00h45   #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] Se fabriquer un cookie , l'enfoncer dans son navigateur et pirater mon site

Bonjour,

Les nouvelles aventures de PsychoBob au pays des cookies de session:

J'utilise une condition pour l'affichage de certaines pages. Il s'agit de tester si le cookie de session existe, sinon le header renvoit sur la page d'identification.
Code :
1
2
3
4
5
if(!isset( $_COOKIE[ session_name() ] ) )
{
 die(header('Location:dentification.php'));
;}
Bon, mais ne vaut-il pas mieux faire cela :
Code :
1
2
3
4
if(!isset($_SESSION['pseudoSession']))
{
 die(header('Location:identification.php'));
;}
Parce qu'à priori le gars va pas pouvoir se créer une variable de session sur le serveur sans être connecté. Par contre il peut peut-être se fabriquer un petit cookie de session, l'insérer dans son navigateur et faire croire à mon site qu'il est connecté.
J'ai tout compris ?
__________________
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 20/06/2006, 00h52   #2
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
oui, tout compris

en général : ne jamais faire reposer un point de sécurité d'un site sur cookie.

Ils peuvent être forgés (faille de sécurité)
Ils peuvent être désactivée (faille de disfonctionnement)
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 00h55   #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
Donc la première solution est une passoire alors que la seconde est fiable ?
Peut-on passer outre la seconde, du reste ?
Et est-ce la peine de faire plusieurs fois dans la page des test d'existences de variable de session, dès lors qu'un premier test à pour instruction de déclencher le header s'il retourne false ?

J'ai encore du mal à piger le mécanisme là. Mettons que le gars est chez lui il veut afficher une page à accès réservé sans avoir de compte.
Il ne peut pas forcer mes formulaires, il ne lui reste qu'à forcer la condition d'existence des sessions, fait par mes scripts ci-dessus.
Comment il fait ?
De même, si je fais :
if(!isset( $_COOKIE[ session_name() ] ) )
{session_start();}

Puisque le gars peut se fabriquer un faux cookie, il peut aussi très bien démarrer une session sans être connecté. Et là ? Qu'estce qu'il peut faire ? A priori la session ne comportera pas de variables puisquelles sont créés en cas d'identification seulement.

ça fait un max de questions mais elles m'intéressent toute autant.Si quelqu'un a le courage de les traiter une par une, ça sera génial, merci.
__________________
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 20/06/2006, 01h02   #4
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
le seul moyen de contourner le second test est le vol de session (ou le piratage du serveur)

si tu es sûr à 100% que ta variable de session existe (exemple, arrêt prématuré du script en cas de non-existence) alors le test de blocage suffit (celui qui arrette le script) à condition qu'il soit fait avant les autres accès à la variable bien sûr
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 12h31   #5
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
En tout, je fais cela en haut de mes pages, dîtes-moi si vous-y voyez une faille :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
<?php
//test si le cookie de session a été créé lors de l'authentification
if( isset( $_COOKIE[ session_name() ] ) )
{
//démarrage de la session
    session_start();
   //verification du temps d'activité ou d'inactivité
if(time()-$_SESSION['dernier_acces']>1200) 
{
//si plus de 1200 secondes d'inactivité : on détruit cookie et session
setcookie(session_name(), '', 1 ); // on détruit le cookie
//on détruit la session
$_SESSION = array();
session_destroy();
}
//si le délais n'est pas dépassé, on réinitialise la variable de session 
au temps actuel.
else
{
$_SESSION['dernier_acces'] = time();
}
}//fin du test d'existence de cookie de session
 
//si la variable pseudoSession initialisée dans le script d'identificiation.php
 n'est pas présente, alors on renvoit à la page identification.php
if(!isset($_SESSION['pseudoSession']))
{
 die(header('Location: identification.php'));
;}
?>
Qu'est ce que vous en pensez ? Du point de vue de la sécurité j'entend, parce que ça fonctionne bien sinon (à l'exception d'opéra qui connecte et déconnecte sans arrêt mais bon je verrais ça plus tard.
__________________
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 20/06/2006, 17h22   #6
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
pourquoi tu te sers de cookies ?

les sessions suffisent largement pour ce que tu veux faire, ton test sur les cookies est comme si tu mettais if(1), parce que pour moi les cookies sont des supers passoires.

Donc voila.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 17h23   #7
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Je me sers des cookies parce que je veux que les sessions passent par les cookies et pas dans l'url, masquées ou non.
__________________
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 20/06/2006, 17h29   #8
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
une session, si je ne m'abuse, c'est :
toutes les infos stockées sur le serveur.
et un ids stocké sur ton disque.

donc je vois pas trop de quoi tu parles.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 17h36   #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
Je parle de l'id de session, parce qu'un id de session en cookie ça se vole plus difficilement qu'un id de session dans l'url.
__________________
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 20/06/2006, 17h40   #10
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
dans ce cas, utilise les session, et fait un IDS2 de ton cru que tu balades dans l'url avec les GET.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 17h48   #11
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Comment ça utilise les sessions ? J'utilise les sessions j'ai des variables de sessions simplement c'est l'id de session qui est stocké chez le client dans un cookie.
Y'a une fonction pour ça normalement session_use_cookie() ou un truc comme ça mais apparemment chez ovh on a du mal avec ce truc (cf le post de Titoumimi).

Je sais pas ce que c'est qu'un IDS2 (id de session?) et je veux pas qu'il y ait quoi que ce soit dans mon url, c'est d'ailleurs la première raison pour laquelle je force les sessions par cookies parce que sinon les moteurs vont morfler avec des urls désastreuses. d'ailleurs c'est mon site qui va morfler, pas les moteurs. Et accessoirement c'est plus sur par cookie.
__________________
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 20/06/2006, 17h57   #12
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
Citation:
Je parle de l'id de session, parce qu'un id de session en cookie ça se vole plus difficilement qu'un id de session dans l'url.
Quand les paquets sont envoyés en HTTP sur le réseau, il me semble (mais pas sûr ^^) que l'un ou l'autre des deux cas ne change absolument rien. L'info est de toute façon présente dans les paquets.
Un moyen de limiter un peu le vol de session est de stocker l'ip et l'id de session du client dans une BDD et de ne délivrer les pages qu'après vérification sur chaque page. Mais bon, il suffit que deux personnes soit sous le même proxy et si l'une vole l'id de session de l'autre, elle pourra se connecter vu les 2 clients auront la même ip.
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 17h58   #13
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Plutot que de gerer le session via php tu peux gérer les session via une base de donnée. Ainsi c'est toi qui émule le tous et tu es sur qu'elle ne peut passer dans l'url puisque c'est toi qui le gère.
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 18h11   #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
Citation:
Quand les paquets sont envoyés en HTTP sur le réseau, il me semble (mais pas sûr ^^) que l'un ou l'autre des deux cas ne change absolument rien. L'info est de toute façon présente dans les paquets.
Je vois pas bien comment ça fonctionne mais celon tout ce que j'ai lu les sessions se vole bcp plus difficilement quand l'id passe en cookie plutot que dans l'url. Il faut alors utiliser un script pour récupérer le cookie chez le client, script qui ne fonctionne plus si on filtre les entrées de formulaire via htmlspecialchars.
Ou alors il faut aller sur le pc du client récupérer physiquement le cookie.
Je répète ce que j'ai compris de ce que j'ai lu.


Je vois mal comment faire passer par une base de donnée en plus c'est beaucoup plus lourd quand même. Mais admettons, il va bien falloir le faire passer de page en page le faux id de session. Et là comment faire sans le faire passer l'url ou en cookie ?
__________________
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
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h05.


 
 
 
 
Partenaires

Hébergement Web