Session et securite

malopo
WRInaute discret
WRInaute discret
 
Messages: 61
Inscription: 6 Juil 2007

Session et securite

Message le Lun Sep 10, 2007 20:15

Bonjour,

Existe-t-il une fonction PHP pour signer les actions faites par un utilisateur qui est enregistre (avec session PHP) ?

De plus, peut-on eviter que les variables de session soient modifiees par l'utilisateur ? Ces variables la sont elles sures ?
par exemple j'ai une page

<?php
session_start();
echo $nom;
?>

ou $nom est une variable de session. Si l'utilisateur appelle
mapage.php?nom=julie
il change le resultat de echo $nom !!!

Merci

bozoleclown
WRInaute impliqué
WRInaute impliqué
 
Messages: 893
Inscription: 24 Nov 2005

Message le Lun Sep 10, 2007 21:43

non car il est fortement conseillé de travaillé avec le registrer globals à off
Registrer_globals est désactivé maintenant chez la plupart des hébergeurs

dans ton cas il faut faire pour afficher la variable de sessions
Code: Tout sélectionner
echo $_SESSION[nom]


pour afficher le ?nom envoyé en paramètre dans l'url, tu devrais faire un
Code: Tout sélectionner
echo $_GET[nom]


Ainsi les différentes variables sont étanches les unes par rapport aux autres.
plus d'informations http://fr2.php.net/register_globals

boutdepapier
WRInaute discret
WRInaute discret
 
Messages: 163
Inscription: 4 Aoû 2006

Message le Mar Sep 11, 2007 8:57

Comme dit bozo il faut utiliser les variables de sessions et bien refermer aprés utilisation :)
ex :
session_start();
$loge = true;
$_SESSION['loge'] = $USER;
session_write_close();

Et là tu auras des variables de sessions correctes. Et si tu veux faire disparaître les traces tu peux détruire cette variable dans certains cas (par exemple une déconnexion).

Ha oui, (à ne pas oublier) la variable SESSION a un timer !

Si cette solution ne te va pas passe par des petits gateaux secs (cookie)...


e-kiwi
Modérateur
Modérateur
 
Messages: 15544
Inscription: 23 Déc 2003

Message le Mar Sep 11, 2007 9:02

>> Existe-t-il une fonction PHP pour signer les actions faites par un utilisateur qui est enregistre

non à toi de le coder à chaque action.

>> De plus, peut-on eviter que les variables de session soient modifiees par l'utilisateur ?
un utilisateur ne peut pas modifier de variable de session. dans ton cas c'est une erreur de code. tu dois utiliser $_GET pour les variables dans l url, $_POST pour els variables de formulaire, $_SESSION pour les variables de session, etjuste $ pour les variables que tu crée toi dans ton code.

>> il change le resultat de echo $nom !!!
oui, mais pas $_SESSION['nom'] qui est ta variable de session. apres ton serveur est configuré de manière trop permissive.

malopo
WRInaute discret
WRInaute discret
 
Messages: 61
Inscription: 6 Juil 2007

Message le Mar Sep 11, 2007 16:06

Il faut donc coder la signature soi meme...

Y a-t-il une pratique recommandee pour cette signature ?

par exemple un md5(identifiant du visiteur + secret connu de personne) ?

malopo
WRInaute discret
WRInaute discret
 
Messages: 61
Inscription: 6 Juil 2007

Message le Mar Sep 11, 2007 16:08

D'ailleurs est-il vraiment utile de donner une signature different pour chaque action ?
Ou est-ce que c'est toujours sur de donner une seule signature a un utilisateur pour toutes ses actions?

boutdepapier
WRInaute discret
WRInaute discret
 
Messages: 163
Inscription: 4 Aoû 2006

Message le Mar Sep 11, 2007 17:07

Nan nan pas de signature la variable session est différente pour chaque utilisateur !

malopo
WRInaute discret
WRInaute discret
 
Messages: 61
Inscription: 6 Juil 2007

Message le Mar Sep 11, 2007 23:54

la variable de session est secrete, non?
on peut pas la devoiler dans le code html

bozoleclown
WRInaute impliqué
WRInaute impliqué
 
Messages: 893
Inscription: 24 Nov 2005

Message le Mer Sep 12, 2007 0:03

Je pense que tu parles du PHPSESSID
l'id de session

permettant de faire le lien entre un accès utilisateur et sa session en cours

2 possibilités
le mettre dans l'url donc là il est en clair (pas recommander pour le ref)
soit tu le mets dans un cookie et donc il est un peu moins en clair

Donc faut priviliégier la solution cookie qui fait plus pro.

malopo
WRInaute discret
WRInaute discret
 
Messages: 61
Inscription: 6 Juil 2007

Message le Mer Sep 12, 2007 15:59

Donc PHPSESSID n'est pas ce que je cherche.

Je veux me proteger contre les attaques suivantes:

j'ai par exemple un script
changerville.php?ville=paris qui modifie la ville dans laquelle l'utilisateur est enregistre. Le script verifie que la session de l'utilisateur avant de changer sa ville.

Par contre quelqu'un peut creer un site mechant.com sur lequel il y a par exemple:
<img src="monsite.com/changerville.php?ville=hack" />
et y fait venir des visiteurs loggues de mon site. Resultat, le compte de mes utilisateurs est change sans qu'ils n'aient rien demande.

Il faut donc que je signe l'action... d'ou mon post...

boutdepapier
WRInaute discret
WRInaute discret
 
Messages: 163
Inscription: 4 Aoû 2006

Message le Mer Sep 12, 2007 16:16

Bah non tu permets de changer la ville si dans la variable de session il y a bien un connect = true et l'id de l'user dans la variable de session correspond bien à l'id que tu dois modifier.
Je suis clair ?

malopo
WRInaute discret
WRInaute discret
 
Messages: 61
Inscription: 6 Juil 2007

Message le Mer Sep 12, 2007 16:22

un utilisateur de mon site qui est en train de naviguer sur mon site (il est connecte) et va sur la page avec le
<img src="..."> renverra un cookie valide!

boutdepapier
WRInaute discret
WRInaute discret
 
Messages: 163
Inscription: 4 Aoû 2006

Message le Mer Sep 12, 2007 16:42

Pour moi un cookie se modifie pour plus de sécurité il faut utiliser les sessions.

bozoleclown
WRInaute impliqué
WRInaute impliqué
 
Messages: 893
Inscription: 24 Nov 2005

Message le Mer Sep 12, 2007 16:52

malopo a écrit:un utilisateur de mon site qui est en train de naviguer sur mon site (il est connecte) et va sur la page avec le
<img src="..."> renverra un cookie valide!


Oui mais bon tu atteins un peu les limites du système.
Tu peux vérifier le referer de la page pour voir si ton utilisateur est bien sur ton site ou bien mettre le phpsessionid dans l'url pour ce cas.

Des petits malins font ça des fois dans les flux rss, ils mettent une image qui fait une rediction 301 vers la page de déconnexion de google reader par exemple. Du coup tu es déconnecté. Tu y peux rien dans ce cas.

@boutdepapier : c'est pas le problème ici. je pense. on parle juste de stocker l'id de session dans un cookie.

bozoleclown
WRInaute impliqué
WRInaute impliqué
 
Messages: 893
Inscription: 24 Nov 2005

Message le Mer Sep 12, 2007 17:04

sinon quand l'utilisateur change de ville

tu peux faire une page intermédiaire
où tu lui demandes "confirmer votre changement de ville OUI/NON ?"

et donc du coup voila une parade pour les appels externes en plus du referer.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité