Page 1 sur 1

Sécurité de transmission par $_SESSION

Posté : 04 févr. 2011, 15:57
par jacfev
Bonjour,

Suite à un précédent post, une recommandation m'était faite de transmettre les variables par la superglobale $_SESSION, mais celle-ci peut être modifiée facilement dans l'url.
Bon ce n'est sûrement pas un scoop pour certains d'entre vous.

Demo :

issu de CÉCILE ODERO et MAGALI CONTENSIN (PHP Solutions)

Dans page1.php

session_start();
// recuperer le parametre passé dans l'URL
$nb = isset($_GET['nb']) ? (int)$_GET['nb'] : 0;
// stocker les donnees dans des variables de session
$_SESSION['quantite'] = $nb;
$_SESSION['ref'] = 'A-06-18';


Dans page2.php

session_start();
// afficher les variables de session
foreach ($_SESSION as $cle=>$valeur) {
echo "Variable de session $cle, contenu = $valeur<br>";
}


Si le script page1.php est modifié dans l'url :
?nb=12

Cela affecte le contenu de la variable quantite.
Ce n'est pas beaucoup plus sûr que de transmettre par $_GET.

Comment y remédier alors ?

Cordialement
Jacques.

Re: Sécurité de transmission par $_SESSION

Posté : 04 févr. 2011, 16:06
par xTG
Le soucis de sécurité que tu présentes ne provient en aucun cas d'un soucis de session mais de passage de variable par méthode GET. ;)

Re: Sécurité de transmission par $_SESSION

Posté : 04 févr. 2011, 16:12
par moogli
pour compléter, je dirais d'utiliser un formulaire en POST si tu souhaite que cela soit p lus "transparent" pour le navigateur, il te faudra gérer le fait qu'il ne faut pas prendre en compte un "refresh" de la page qui poste la quantité :)


@+

Re: Sécurité de transmission par $_SESSION

Posté : 04 févr. 2011, 17:52
par AB
Oui tu n'a qu'à suivre le conseil de moogli et tu n'auras plus ce problème car comme l'a fait remarquer xTG c'est dû au choix de la méthode que tu utilise pour transmettre tes variables et non pas du fait de l'utilisation des sessions.

A propos des sessions il faut éviter que l'identifiant de session passe dans l'url.

On peut essayer de mettre la mention "php_flag session.use_trans_sid off" dans un .htaccess à la racine du site.

Si pas possible (sur les mutualisés) reste la solution de vérifier que le navigateur client accepte les cookie et sinon envoyer éventuellement un message d'avertissement...