IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Sécurité] Problème de valeur de session


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut [Sécurité] Problème de valeur de session
    Bonjour,

    J'ai un formulaire, avec un champ dont la valeur par défaut est le contenu d'une variable session (ou tout au moins c'est ce que j'aimerais)

    Au début du script, j'essaie d'initialiser la variable session de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
           session_start();
     
    	if(isset($_POST['filtre_no_adh'])) 
    	{ 
    		$_SESSION['no_adh'] = $_POST['filtre_no_adh']; 
    	} 
    	else 
    	{
    		if(!isset($_SESSION['no_adh']))
    		{
    				$_SESSION['no_adh'] = '';
    		}	
    	}
    Or mon champ est tout le temps à vide : pourquoi ?
    Est-ce qu'uns session se termine lorsqu'on met "?>" ? (je ferme les balises php après le traitement ci-dessus, et je les réouvre pour affecter la valeur dans le champ de saisie)

    Merci d'avance.

  2. #2
    Membre émérite Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Par défaut
    Salut,
    Citation Envoyé par navis84
    Or mon champ est tout le temps à vide : pourquoi ?
    vu que ton code PHP m'a lair bon à première vue, je pencherais pour un problème avec ton formulaire html
    Citation Envoyé par navis84
    Est-ce qu'uns session se termine lorsqu'on met "?>" ?
    Non !
    Non seulement, elle ne se termine pas quand tu mets ?>, mais elle ne se termine pas non plus quand le script est terminé.
    Une session ne se termine que lorsqu'elle expire (inactivité pendant X secondes), ou lorsque tu apelles explicitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    session_destroy();
    c'est l'avantage des sessions (les valeurs sont conservées de script en script)
    Fais voir le code html de ton formulaire ?

  3. #3
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 127
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
           session_start();
     
    	if(isset($_POST['filtre_no_adh'])) 
    	{ 
    		$_SESSION['no_adh'] = $_POST['filtre_no_adh']; 
    	} 
    	else 
    	{
    		$_SESSION['no_adh'] = '';
    	}
    aurait suffit, a priori c'est ta variable post qui n'est pas déclarée.

    fait un dans ta page pour voir ce que tu as dedans.

  4. #4
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    Merci à vous deux pour votre aide.

    Voici les précisions que vous m'avez demandées, avec les étapes d'un scénario habituel :

    1. L'utilisateur arrive sur la page en vue de saisir le formulaire et la session s'ouvre. $_POST contient Array().

    2. L'utilisateur envoie le formulaire. $_POST contient : Array ( [PHPSESSID] => 0a7648fb358773af0a700dc36d659e78 [filtre_no_adh] => 26 [bt_filtre] => Effectuer la recherche )

    3. Je clique sur OK en face de l'url pour recharger la page. $_POST contient Array().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Voici plus en détail mon formulaire :
    <form name="frm_filtre" method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
         <input type='text' name='filtre_no_adh' size='10' maxlength='10' value='<?php echo $_SESSION['no_adhes']; ?>' />
         <input type='submit' name='bt_filtre' value='Effectuer la recherche' />
    </form>
    Voyez-vous un souci à ce niveau ?

    PS : j'ai essayé de mettre le contenu de la variable session dans une variable, que je mets dans le contenu de la zone de texte, et la valeur s'affiche une fois dans la zone de texte, alors que ce n'est pas le cas avec la variable session.

  5. #5
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 127
    Par défaut
    1. L'utilisateur arrive sur la page en vue de saisir le formulaire et la session s'ouvre. $_POST contient Array().
    normal.

    2. L'utilisateur envoie le formulaire. $_POST contient : Array ( [PHPSESSID] => 0a7648fb358773af0a700dc36d659e78 [filtre_no_adh] => 26 [bt_filtre] => Effectuer la recherche )
    parfait.

    3. Je clique sur OK en face de l'url pour recharger la page. $_POST contient Array().
    normal.

    quand tu envoie le formulaire, la page qui arrive contient des variables post. mais si tu recharges la page ou passe à la suivante, il n'y a plus de variable post, ce qui est normal vu que tu n'as pas relancé de formulaire.

    formulaire = variable post sur la page qui arrive et c'est tout

    Donc il faut que tu ta pages tu récuperes la variable post et que tu la stocke dans une variable de session et que tu n'utilises que la variable de sessions.

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    Oui, je suis bien d'accord avec ça. Et je trouve tout ce qui touche à la variable $_POST normal. Je décrivais juste le scénario en répondant à vos questions.

    Par contre, comme je l'explique dans mes premiers messages, ma variable de session est vide lorsque je veux la réutiliser comme valeur par défaut dans le formulaire, ou lorsque je reviens sur la page. Et c'est à ce niveau que se situe le problème.

  7. #7
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 127
    Par défaut
    fais tu des session_start(); au début de chaque page ?

    rebelotte tu refais un print_r($_SESSION); et tu nous dit quand est-ce que tu "perds" ta valeur de session

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    Citation Envoyé par Maxoo
    fais tu des session_start(); au début de chaque page ?
    Oui. En l'occurence je n'utilise que cette page pour le moment, mais elle utilise bien session_start() au tout début.

    Citation Envoyé par Maxoo
    rebelotte tu refais un print_r($_SESSION); et tu nous dit quand est-ce que tu "perds" ta valeur de session
    Etape 1 : Array ( [no_adhes] => )
    Etape 2 : Array ( [no_adhes] => 28000156 )
    Etape 3 : Array ( [no_adhes] => )

    Je ne comprends pas pourquoi la variable devient vide, alors que je ne la détruis nulle part...

  9. #9
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 127
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	if(isset($_POST['filtre_no_adh'])) 
    	{ 
    		$_SESSION['no_adh'] = $_POST['filtre_no_adh']; 
    	} 
    	else 
    	{
    		$_SESSION['no_adh'] = '';
    	}
    ca serait pas la qu'il repasse une deuxieme fois et comme y a pas de POST il écrase par "" ?

    car la deuxieme fois ton POST ne vaut rien.

    enleve le else, car les sessions sont déja alloué de toute facon. et quand tu fais un session_start tout a début, tu n'as rien dans les sessions.

    ++

  10. #10
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    Mon code initial était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            if(isset($_POST['filtre_no_adhes'])) 
    	{ 
    		$_SESSION['no_adhes'] = $_POST['filtre_no_adhes']; 
    	} 
    	else 
    	{
    		if(!isset($_SESSION['no_adhes']))
    		{
    				$_SESSION['no_adhes'] = '';
    		}	
    	}
    Que ce soit avec ton code ou celui ci-dessus, j'ai toujours le même problème...

  11. #11
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 127
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(isset($_POST['filtre_no_adhes'])) 
    { 
    	echo 'je suis passé par la !!';
    	$_SESSION['no_adhes'] = $_POST['filtre_no_adhes']; 
    }
    test ca, et dis moi si ca passe la sur la troisieme page.
    et sinon tu n'as pas d'autre endroit ou $_SESSION['no_adhes'] = quelquechose ?

  12. #12
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    Cela ne passe pas sur la 3e page.

    Citation Envoyé par Maxoo
    et sinon tu n'as pas d'autre endroit ou $_SESSION['no_adhes'] = quelquechose ?
    Non, nulle part...

  13. #13
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 127
    Par défaut
    whaa ... tu as pas un session_destroy ?
    le plus simple si c'est possible c'est que tu montres tout ton code maintenant, car sinon je vois pas.

    et c'est pas un probleme de ton navigateur ? on peut pas nous tester en ligne ?

  14. #14
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    Citation Envoyé par Maxoo
    et c'est pas un probleme de ton navigateur ? on peut pas nous tester en ligne ?
    J'ai testé sous IE et Firefox : même résultat.
    De plus, le script est en intranet, donc impossible de le consulter en ligne.

    Citation Envoyé par Maxoo
    whaa ... tu as pas un session_destroy ?
    Non.

    Citation Envoyé par Maxoo
    le plus simple si c'est possible c'est que tu montres tout ton code maintenant, car sinon je vois pas.
    Je pense qu'avant de poster mon script (qui est assez long), je vais essayer de le réécrire afin de le débuguer.

    Je vous tiens au courant et encore merci pour l'aide.

  15. #15
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 127
    Par défaut
    pas de probleme !!

    fait des echo partout pour débugger, je fais comme ça moi et j'arrive à piger par ou il passe.

    et je print ca à chaque début de page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '$_POST :<pre>'; print_r($_POST); echo '</pre><br>';
    echo '$_GET :<pre>'; print_r($_GET); echo '</pre><br>';
    echo '$_SESSION :<pre>'; print_r($_SESSION); echo '</pre><br>';

  16. #16
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    Bon finalement, j'ai trouvé la ligne qui fait défaut :

    Mais je ne comprends pas pourquoi cela réinitialise la variable session car je ne l'appelle pas... As-tu une explication ?

  17. #17
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 127
    Par défaut
    ah ah !!

    oki, c'est à cause d'un clause de php, tu as register_global à 1 (ON) je parie et du coup dans le script ca fout le dawa.

    en gros quand on a register_global à 1, $toto = $_GET, $_POST, $_SESSION du meme nom.

    va voir ce post si ca t'interesse : http://www.developpez.net/forums/sho...d.php?t=169399

    sinon pour ta solution : soit changer de nom soit désactiver register_global, car c'est une faille de sécurité quand meme

  18. #18
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    En effet, je viens de regarder le php.ini et register_global est bien à 1. C'est la première fois ou presque que je vais fouiller dans ce fichier !

    Pour l'instant, je change le nom de ma variable session.

    Par défaut, le register_global doit être à 0, non ?

  19. #19
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 127
    Par défaut
    Citation Envoyé par navis84
    Par défaut, le register_global doit être à 0, non ?
    oui logiquement par défaut et pour des regles de sécurité il doit etre a 0, mais en fait la plupart des trucs le mette à 1, comme ca les nouveaux sont pas habitué à écrire $_POST[toto], et peuvent écrire $toto à la place.

    mais c'est SUPER déconseillé. change le nom de ta variable mais change aussi à 0 register_globals, car comme ca tu es sur que les prochaines erreurs ne viendront pas de la

  20. #20
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    OK. Et bien merci beaucoup pour ta patience et tes explications ! C'est très sympa !
    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/10/2007, 14h27
  2. [Sécurité] problème déconnexion d'une session
    Par gazelle dans le forum Langage
    Réponses: 4
    Dernier message: 18/04/2007, 19h31
  3. [Sécurité] Problème de sessions avec IE6
    Par TheMoutch dans le forum Langage
    Réponses: 8
    Dernier message: 21/08/2006, 17h52
  4. [Sécurité] Problème avec des variables de session
    Par zoom61 dans le forum Langage
    Réponses: 28
    Dernier message: 18/08/2006, 21h05
  5. [Sécurité] Problème de session
    Par Sandara dans le forum Langage
    Réponses: 31
    Dernier message: 23/05/2006, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo