Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1390 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Sessions et identification

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Sessions et identification

n°1165956
ritzle
Posté le 31-07-2005 à 12:06:26  profilanswer
 

Bonjour,
 
J'ai fait un simple système d'authentification avec session.
Si l'authentification réussi, je mets la valeur '1' dans $_SESSION['auth'], et au débutde chaque page je vérifie si $_SESSION['auth'] == '1'
La sécurité est-elle suffisante ? Quelqu'un pourrait-il changer la valeur de la variable de session ?
 
Merci

mood
Publicité
Posté le 31-07-2005 à 12:06:26  profilanswer
 

n°1165960
sielfried
Posté le 31-07-2005 à 12:20:18  profilanswer
 
n°1166031
ritzle
Posté le 31-07-2005 à 14:52:10  profilanswer
 

donc je dois mettre le login et le mdp dans une variable de session, et je verifie s'ils correspondent à chaque page ?

n°1166043
gebruik
Posté le 31-07-2005 à 15:26:18  profilanswer
 

A priori la gestion de session semble sure.

n°1166044
ritzle
Posté le 31-07-2005 à 15:29:16  profilanswer
 

j'ai des doutes après avoir lu le texte de sielfried

n°1166046
gebruik
Posté le 31-07-2005 à 15:42:06  profilanswer
 

Oui, mais lis bien son article.
Déjà, passer son numéro de session en GET dans son URL est une hérésie et c'est sans intérêt, les variables de session étant superglobales.
Ensuite, l'utilisation de sessions te permet de t'affranchir des cookies, alors que l'exemple en fait mention. Comme pas mal de navigateurs les limitent ou les bloquent, autant ne pas les utiliser.
Quant à la récupération des mots de passe sur une BdD, là aussi il convient de prendre les précautions nécessaires et ne pas autoriser n'importe qui à y accéder.
 
Avec les protections habituelles (failles include et require par exemple), pas de valeurs passées en GET (surtout au niveau de l'ID Session) et pas de cookies relatif à la session sur la machine client, tu limites considérablement les risques.

n°1166068
mcjoedassi​n
Posté le 31-07-2005 à 16:29:42  profilanswer
 

il y a deux informations contradictoires dans ton message
> l'utilisation de sessions te permet de t'affranchir des cookies
> passer son numéro de session en GET dans son URL est une hérésie
 
la stratégie de php est de placer un cookie de session quand c'est possible, sinon on passe l'id de session dans l'URL

n°1166074
ritzle
Posté le 31-07-2005 à 16:35:55  profilanswer
 

il n'est pas nécessaire de faire passer en GET, puisqu'on a le tableau $_SESSION

n°1166076
mcjoedassi​n
Posté le 31-07-2005 à 16:38:48  profilanswer
 

PHP gère ça en toute transparence

n°1166082
gebruik
Posté le 31-07-2005 à 16:47:29  profilanswer
 

mcjoedassin, il n'y a rien de contradictoire : on voit de nombreux sites avec une ID Session écrite noir sur blanc dans l'URL alors qu'il est parfaitement envisageable de s'en passer.
 
Pour les cookies, il faut tenir compte du nombre croissant d'utilisateurs qui les refusent systématiquement. Autant faire comme si ils n'étaient pas acceptés.
 
Bref, je ne vois aucune contradiction dans mes propos.

mood
Publicité
Posté le 31-07-2005 à 16:47:29  profilanswer
 

n°1166087
mcjoedassi​n
Posté le 31-07-2005 à 16:53:46  profilanswer
 

désolé de m'être mal exprimé ...
en fait le client DOIT envoyer à chaque fois son numéro de session pour  
que le serveur s'identifie... et pour ce faire, il y a deux façons :
dans l'URL ou à l'aide d'un cookie...
 
ce qui fait que tu ne peux dénigrer ces deux solutions d'un seul bloc ...

n°1166088
mcjoedassi​n
Posté le 31-07-2005 à 16:54:09  profilanswer
 

que le serveur L'identifie, sorry

n°1166092
gebruik
Posté le 31-07-2005 à 17:02:09  profilanswer
 

Mais c'est ton serveur qui gère ton ID de session, par le poste client.
Je fais régulièrement des sites avec identifications et gestion de session, sans cookies et à aucun moment l'ID session n'apparaît dans l'URL.
 
Effectivement, pour éviter à un utilisateur de s'identifier à chaque passage, il faut nécessairement envoyer des infos au serveur et je pense que tes propos allaient dans ce sens. Mais cette méthode a des failles.
Question de goût, mais je préfère développer des sites avec identification uniquement par session, ce qui implique que l'utilisateur doivent s'identifier à nouveau si il a fermé son navigateur. De cette façon, pas de cookies, pas d'ID dans l'URL.

n°1166095
mcjoedassi​n
Posté le 31-07-2005 à 17:07:30  profilanswer
 

ah d'accord, en fait tu n'utilises pas vraiment les sessions, c'est ça ? je veux dire à chaque fois que le client veut voir une page il est obligé de s'identifier, c'est ça ?

n°1166096
mcjoedassi​n
Posté le 31-07-2005 à 17:10:42  profilanswer
 

ou disons que tu fais à chaque fois un POST avec dedans le login&password de l'utilisateur ?

n°1166100
gebruik
Posté le 31-07-2005 à 17:27:03  profilanswer
 

Pas du tout. Chaque utilisateur qui va sur le site a sa propre session (session_start). Qu'il soit identifié ou non, tant qu'il ne ferme pas son navigateur, son ID session est créé et c'est le serveur qui gère.
L'utilisateur peut s'identifier par exemple pour valider un achat. La session est toujours la même, et une fois identifié, je crée la variable $_SESSION['login'] et $_SESSION['password']. En plus, je récupère dans la base de données le statut relatif à la personne identifiée (administrateur, client, super-administrateur). Je crée une variable $_SESSION['statut'] dans laquelle je place le statut de l'identifié.
Les variables de session étant des superglobales, je n'ai pas besoin de les passer d'une page à l'autre.
Dès que je dois vérifier un droit, comme par exemple l'accès aux pages d'administration, je me contente de tester $_SESSION['statut'] qui a été créé, je le rappelle, une fois le login et le password authentifiés. Donc, pas de d'identification, pas de $_SESSION['statut'] (enfin, une valeur nulle).
Il suffit d'appeler une fonction au début de chacune de tes page pour tester la valeur de $_SESSION['login'].
 
Donc, pas de cookies, rien dans l'URL, tout se gère côté serveur.

n°1166102
mcjoedassi​n
Posté le 31-07-2005 à 17:30:10  profilanswer
 

donne moi l'adresse d'un de tes sites !

n°1166103
gebruik
Posté le 31-07-2005 à 17:32:57  profilanswer
 

En cours de réalisation et utilisation cette méthode :
http://www.caroline-et-cie.fr
 
L'inscription et l'identification sont opérationnelles, je t'invite à essayer. Accessoirement, si tu trouves une faille quelconque, pense à faire le feedback.

n°1166104
mcjoedassi​n
Posté le 31-07-2005 à 17:33:17  profilanswer
 

session_start() crée une session (ou restaure celle trouvée sur le serveur, via l'identifiant de session passé dans une requête GET, POST ou par un cookie) (cf http://fr.php.net/manual/fr/functi [...] start.php)

n°1166105
gebruik
Posté le 31-07-2005 à 17:34:32  profilanswer
 

Une fois identifié, quand tu vas sur ton compte, tu peux modifier tes infos. Même méthode : requête sur la base pour récupérer les informations d'un inscrit, je stocke le résultat dans des variables de session.
Pour le formulaire de modification, je me contente de les récupérer.

n°1166106
mcjoedassi​n
Posté le 31-07-2005 à 17:36:06  profilanswer
 

oh le beau cookie !
 
$nc www.caroline-et-cie.fr 80
GET / HTTP/1.1
Host: www.caroline-et-cie.fr
 
HTTP/1.1 200 OK
Date: Sun, 31 Jul 2005 15:34:13 GMT
Server: Apache/1.3.20 Sun Cobalt (Unix) mod_ssl/2.8.4 OpenSSL/0.9.6 PHP/4.3.10 FrontPage/5.0.2.2510 mod_perl/1.26
X-Powered-By: PHP/4.3.10
Set-Cookie: PHPSESSID=9f5154450c5b167229f959d82d4b4e73; path=/
...

n°1166107
gebruik
Posté le 31-07-2005 à 17:41:27  profilanswer
 

Ca, c'est le fonctionne par session : il y a tentative d'écriture de cookie sur le poste client. Si le poste les accepte, OK, c'est écrit. Sinon, pas de soucis, ça continue.
Le site est hébergé sur un serveur mutualisé, je n'ai donc pas accès au php.ini ou sont paramétrés les cookies de session (comme le session.lifetime). Il est évident que ce pour ce site en particulier qui sera hébergé sur un serveur dédié, il n'y aura pas de cookies de session écrits sur le disque client.


Message édité par gebruik le 31-07-2005 à 17:46:31
n°1166108
mcjoedassi​n
Posté le 31-07-2005 à 17:45:41  profilanswer
 

l'identification n'est alors valide que pour une page, non ? s'il veut faire un achat, puis un autre, il est obligé de s'identifier deux fois ?

n°1166110
gebruik
Posté le 31-07-2005 à 17:49:16  profilanswer
 

Pas du tout : ton identification est valide jusqu'à ce que tu fermes ton navigateur, ou encore que tu te déconnectes ou bien au-delà du délai défini dans PHP.INI
Et pas besoin d'utiliser des inclusions comme je l'ai fait, la méthode fonctionne avec des pages toutes simples.

n°1166112
mcjoedassi​n
Posté le 31-07-2005 à 17:50:36  profilanswer
 

explique moi alors comment le serveur c'est à qui il a affaire puisque le client ne lui envoies pas l'id de session ni son login|password ?

n°1166113
gebruik
Posté le 31-07-2005 à 17:52:24  profilanswer
 

Parce que c'est le serveur qui gère : tant que la connexion est existante, c'est-à-dire que les sockets de connexion entre le client et le serveur sont actifs, ta session reste ouverte.

n°1166115
mcjoedassi​n
Posté le 31-07-2005 à 17:58:01  profilanswer
 

certains proxy partagent cette connexion entre les différents utilisateurs... par ailleurs internet explorer peut créer plusieurs connexions TCP pour charger les pages. Enfin, la connexion TCP reste active 17.6 secondes (temps calculé chez moi).
 
Es tu bien sûr de ce que tu avances ?

n°1166117
gebruik
Posté le 31-07-2005 à 18:05:13  profilanswer
 

Oui, j'ai eu aussi cette réflexion en découvrant la gestion des sessions en PHP, mais cette gestion est complément transparente.
Sur le même site, ma cliente est actuellement en train d'uploader ses articles en utilisant un espace d'administration qui fonctionne de façon similaire : elle s'identifie, et ensuite elle uploade à la chaîne, son identification restant valide tant qu'elle ne ferme pas son navigateurs.

n°1166118
mcjoedassi​n
Posté le 31-07-2005 à 18:14:20  profilanswer
 

j'imagine qu'elle a les cookies activée ...
 
de toute façon, ton argument est faux, PHP ne ferait pas une telle erreur :
HEAD / HTTP/1.1
Host: www.caroline-et-cie.fr
 
HTTP/1.1 200 OK
Date: Sun, 31 Jul 2005 16:13:02 GMT
Server: Apache/1.3.20 Sun Cobalt (Unix) mod_ssl/2.8.4 OpenSSL/0.9.6 PHP/4.3.10 FrontPage/5.0.2.2510 mod_perl/1.26
X-Powered-By: PHP/4.3.10
Set-Cookie: PHPSESSID=942ec49a6d17b3b348297bc4f14b82b3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html
 
HEAD / HTTP/1.1
Host: www.caroline-et-cie.fr
 
HTTP/1.1 200 OK
Date: Sun, 31 Jul 2005 16:13:13 GMT
Server: Apache/1.3.20 Sun Cobalt (Unix) mod_ssl/2.8.4 OpenSSL/0.9.6 PHP/4.3.10 FrontPage/5.0.2.2510 mod_perl/1.26
X-Powered-By: PHP/4.3.10
Set-Cookie: PHPSESSID=2a9cc1ead63162fc470fedeed2187e12; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html
 
HEAD / HTTP/1.1
Host: www.caroline-et-cie.fr
 
HTTP/1.1 200 OK
Date: Sun, 31 Jul 2005 16:13:14 GMT
Server: Apache/1.3.20 Sun Cobalt (Unix) mod_ssl/2.8.4 OpenSSL/0.9.6 PHP/4.3.10 FrontPage/5.0.2.2510 mod_perl/1.26
X-Powered-By: PHP/4.3.10
Set-Cookie: PHPSESSID=37c88277280cf7d66e5653662b53188c; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html
 
 
trois requetes sur la même connexion, trois cookies différents ...

n°1166119
gebruik
Posté le 31-07-2005 à 18:15:38  profilanswer
 

Vérification faite, il y a bien stockage sur le poste client. Je n'ai pas accès au fichier de configuration du serveur, je ne peux pas modifier ces paramètres, comme le nom de la variable de session. Dès que je passe en serveur dédié, je fais l'essai.

n°1166120
mcjoedassi​n
Posté le 31-07-2005 à 18:16:19  profilanswer
 

HEAD / HTTP/1.1
Host: www.caroline-et-cie.fr
Cookie: PHPSESSID=123
 
HTTP/1.1 200 OK
Date: Sun, 31 Jul 2005 16:15:05 GMT
Server: Apache/1.3.20 Sun Cobalt (Unix) mod_ssl/2.8.4 OpenSSL/0.9.6 PHP/4.3.10 FrontPage/5.0.2.2510 mod_perl/1.26
X-Powered-By: PHP/4.3.10
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html
 
HEAD / HTTP/1.1
Host: www.caroline-et-cie.fr
 
HTTP/1.1 200 OK
Date: Sun, 31 Jul 2005 16:15:15 GMT
Server: Apache/1.3.20 Sun Cobalt (Unix) mod_ssl/2.8.4 OpenSSL/0.9.6 PHP/4.3.10 FrontPage/5.0.2.2510 mod_perl/1.26
X-Powered-By: PHP/4.3.10
Set-Cookie: PHPSESSID=87e876bb3b4e07ae3ff2f16009ae97db; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html
 
deux requetes sur la meme connexion, la premiere avec un cookie, la deuxieme sans le cookie : le serveur tente de placer un autre cookie

n°1166121
mcjoedassi​n
Posté le 31-07-2005 à 18:17:12  profilanswer
 

oki doki ! tiens moi au courant ;)

n°1166127
mcjoedassi​n
Posté le 31-07-2005 à 18:24:16  profilanswer
 

Spoiler :

Accessoirement, si tu trouves une faille quelconque, pense à faire le feedback.


 
il y a déjà un path disclosure si tu passes PHPSESSID=# par exemple, tu as
<b>Warning</b>:  session_start(): The session id contains invalid characters, valid characters are only a-z, A-Z and 0-9 in <b>/home/.sites/33/site5/web/index.php</b> on line <b>2</b><br />
<br />
<b>Warning</b>:  session_start(): Cannot send session cache limiter - headers already sent (output started at /home/.sites/33/site5/web/index.php:2)


Message édité par mcjoedassin le 31-07-2005 à 18:27:08
n°1166130
gebruik
Posté le 31-07-2005 à 18:45:33  profilanswer
 

Merci pour ton info, effectivement il y a bien une écriture et jeme coucherai moins crétin que je ne me suis levé ce matin. Curieux, c'est en contradiction avec pas mal de choses que j'ai pu lire sur le net.
Je vais aller fouiller du côté php.ini

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Sessions et identification

 

Sujets relatifs
Piratage : sécurisation variables de sessionsIdentification d'un langage
[PHP] Probleme de sessionssessions phpinfo ?
[php] chez free pb de sessionsle sessions en PHP
sessions & cookies, recuperation info[Résolu] tableaux et sessions
[sessions]pb de variablesContrer les piratages de sessions...
Plus de sujets relatifs à : Sessions et identification


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR