[PHP] Les variables de session magiques...

Les variables de session magiques... [PHP] - PHP - Programmation

Marsh Posté le 22-09-2003 à 04:16:25    

Bonjour,
 
On va prendre un exemple tout con
 
deux fichiers:
 
test1.php

<? session_start();
 
 $_SESSION['user_id'] = "123";
?>
 
<a href="test2.php?user_id=BahViCaAChange">Page2</a>


 
et son copain test2.php

<?
 session_start();
 
 echo "La valeur avant le GET est : ".$_SESSION['user_id']."<br />";
 $user_id = $_GET['user_id'];
 
 echo "La valeur apres le GET est: ".$_SESSION['user_id']."<br />";
?>


 
Et on obtient le résultat suivant quand on clique sur le lien de test1.php
 

La valeur avant le GET est : 123
La valeur apres le GET est: BahViCaAChange


 
Vu que je touche par à $_SESSION['user_id'], qqn pourrait m'expliquer pourquoi ma variable de session magique est modifée ? :D
 
Comment empêcher celà ?

Reply

Marsh Posté le 22-09-2003 à 04:16:25   

Reply

Marsh Posté le 22-09-2003 à 04:29:05    

Je ne suis pas un pro de PHP, mais es-tu sûr que dans la config de PHP, tu n'as pas register_globals a true. Si c'est le cas, ton $user_id référence directement $_SESSION['user_id'], d'où ton erreur.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 22-09-2003 à 04:30:36    

verifie dans ton php.ini que "register_globals" est bien à Off
si c'est pas le cas, met le à off.
 

Citation :

; Whether or not to register the EGPCS variables as global variables.  You may
; want to turn this off if you don't want to clutter your scripts' global scope
; with user data.  This makes most sense when coupled with track_vars - in which
; case you can access all of the GPC variables through the $HTTP_*_VARS[],
; variables.
;
; You should do your best to write your scripts so that they do not require
; register_globals to be on;  Using form variables as globals can easily lead
; to possible security problems, if the code is not very well thought of.
register_globals = Off



---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-09-2003 à 04:31:08    

tiens c'est pas à jour la doc dans ce fichier [:meganne]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-09-2003 à 04:31:57    

en fait tu peux simplement faire un phpinfo() et tu verras ton register_globals ;)
(des fois que t'aurais pas le serveur sous la main)
 
 
(dans la section Configuration - PHP Core, la 2e si je ne m'abuse)
 
 
edit: comment jme fais griller, j'ai rien vu  :kaola:  
ça m'apprendra a vouloir détailler ma reponse :D


Message édité par the real moins moins le 22-09-2003 à 04:33:32

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-09-2003 à 04:34:39    

Je viens de modifier le fichier ini sur ma machine (easyphp)
et ca fonctionne correctement, merci :D
 
Seulement, je ne sais pas si chez mon futur hébergeur cette option sera à Off...
 
J'ai essayé avec un ini_set(), mais ca a pas l'air de marcher, je retente pour voir...

Reply

Marsh Posté le 22-09-2003 à 04:38:25    

Voilà, ca marche nickel.  
Le register_globals est à On dans mon .ini
 
et le fichier test2.php a la tete suivante:

ini_set("register_globals", "Off" );
 session_start();
 
 echo "La valeur avant le GET est : ".$_SESSION['user_id']."<br />";
 $user_id = $_GET['user_id'];
 
 echo "La valeur apres le GET est: ".$_SESSION['user_id']."<br />";


Et ca marche nickel
 
J'avais pas mis le ini_set() avant le session_start(), c'est pour ca que ca marchait pas.
Merci pour votre aide :)

Reply

Marsh Posté le 22-09-2003 à 04:39:02    

gatorette a écrit :

Je ne suis pas un pro de PHP, mais es-tu sûr que dans la config de PHP, tu n'as pas register_globals a true. Si c'est le cas, ton $user_id référence directement $_SESSION['user_id'], d'où ton erreur.


Merci, grace à toi j'ai compris pourquoi ca faisait ca :)

Reply

Marsh Posté le 22-09-2003 à 04:42:13    

the real moins moins a écrit :


edit: comment jme fais griller, j'ai rien vu  :kaola:  
ça m'apprendra a vouloir détailler ma reponse :D


 

Spark a écrit :

Merci, grace à toi j'ai compris pourquoi ca faisait ca :)


 
 :na:


---------------
each day I don't die is cheating
Reply

Marsh Posté le 22-09-2003 à 04:43:13    

:D

Reply

Marsh Posté le 22-09-2003 à 04:43:13   

Reply

Marsh Posté le 22-09-2003 à 04:45:20    

:o
 
spark >> depuis quelques versions de php, cette option est à off par defaut. tu peux de toutes façons faire comme tu l'as fait, pour etre sur ;)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-09-2003 à 04:47:31    

Oki, merci :)
C'est quand même cool d'avoir de l'aide à presque 5h du mat :D

Reply

Marsh Posté le 22-09-2003 à 04:48:50    

oui je m'en étonne moi aussi  :pt1cable:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-09-2003 à 07:34:34    

Donc avec les variables globales à ON ca fait un sacré trou de secu, imaginons qu'une fois une personne loguée sur le site, on enregistre une variable de sessin $login, quelqu'un de malintentioné pourrait tres bien taper page-reservee.php?login=UnNomDeMembreConnu et ainsi acceder aux données reservées ?? :ouch:  
 
Parce que chez mon hebergeur les variables globales sont encore à On à cause de chieurs qui utilisent des scripts tout fait qui reclament le On :sarcastic:  
 
Le iniset on m'en a parlé mais je ne sais plus la syntaxe exacte pour mettre les variables globales à off (possible uniquement si le safe_mode est sur Off ;) )

Reply

Marsh Posté le 22-09-2003 à 08:26:46    

aspegic500mg a écrit :

Donc avec les variables globales à ON ca fait un sacré trou de secu, imaginons qu'une fois une personne loguée sur le site, on enregistre une variable de sessin $login, quelqu'un de malintentioné pourrait tres bien taper page-reservee.php?login=UnNomDeMembreConnu et ainsi acceder aux données reservées ?? :ouch:


C'est à toi de bien gérer dans ton script en n'utilisant pas de variable nommée $login et en accédant toujours à l'information au travers de $_SESSION['login']. On peut même imaginer que si isset( $_GET['login'] ); alors tu affiches un message méchant...
 

aspegic500mg a écrit :

Parce que chez mon hebergeur les variables globales sont encore à On à cause de chieurs qui utilisent des scripts tout fait qui reclament le On :sarcastic:  
Le iniset on m'en a parlé mais je ne sais plus la syntaxe exacte pour mettre les variables globales à off (possible uniquement si le safe_mode est sur Off ;) )


Tu as un exemple juste au dessus. J'ose imaginer qu'il est correct.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 22-09-2003 à 08:33:31    

gatorette a écrit :


C'est à toi de bien gérer dans ton script en n'utilisant pas de variable nommée $login et en accédant toujours à l'information au travers de $_SESSION['login']. On peut même imaginer que si isset( $_GET['login'] ); alors tu affiches un message méchant...


 
J'utilise toujours les variables $_SESSION['login'], mais un simple blabla.php?login=CeQuOnVeut permet de changer la valeur de $_get mais pas de $_session (var globales à off ou on), j'avais pas vu dans le bout de script qu'il avait mis ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed