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é] session_set_save_handler : fonctionne pas


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut [Sécurité] session_set_save_handler : fonctionne pas
    Bonjour,

    Pour accroitre la securite sur mon site, j'ai redefini les actions relatives aux sessions pour pouvoir stocker les donnees de session dans mysql :

    dans le fichier sessions.inc.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...definition des fonctions _open, _close, _read, _write...
     
    ini_set("session.save_handler", "user");
    session_set_save_handler('_open', '_close', '_read', '_write', '_destroy', '_clean');
    Pour tester si cela fonctionne bien, j'ai fait dans un fichier test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; 
    include_once($DOCUMENT_ROOT.'/Prot/sessions.inc.php');
    session_start();
    $foobar = "toto";
    $_SESSION['foobar'] = $foobar;
    echo $_SESSION['foobar'];
    ?>
    Apparemment, je devrai donc voir dans ma base de donnees la variable de session foobar avec le contenu toto car je suppose que lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['foobar'] = $foobar;
    la fonction _write (ajoute la donnee a la session) est appelee.
    Et ce n'est malheureusement pas le cas.
    Ce qui est etonnant, c'est que les fonctions _open, _read sont bien appelees (et que session_set_save_handler retourne TRUE)...

    Donc ma question :

    Comment fait-on pour ecrire une variable de session quand on a modifie le comportement de gestion des sessions avec session_set_save_handler ?

    Si quelqu'un a une idee a propos d'une solution pour ce probleme, je suis preneur !!!

    Merci !!!

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    session_register('nom', $valeur);

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut session_set_save_handler : fonctionne pas
    Merci wamania pour l'idee.

    Malheureusement, cela ne fonctionne toujours pas !
    J'ai teste avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    session_register('foobar', 'toto');
    if ( isset($_SESSION['foobar'])) {
      echo $_SESSION['foobar'];
    } else {
      echo 'unregistered var.';
    }
    Et cela me retourne 'unregistered var'. Donc la fonction _write ne fonctionne pas.

    Pour trouver l'erreur, j'ai alors essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?php
      	function _open()
    	{
    		echo '-open';
    		return 1;
    	}
     
    	function _close()
    	{
    		echo '-close';
    		return 1;
    	}
     
    	function _read($id)
    	{
    		echo '-read';
    		return '';
    	}
     
    	function _write($id, $data)
    	{
    		echo '-write';
    		return 1;
    	}
     
    	function _destroy($id)
    	{
    		echo '-destroy';
    		return 1;
    	}
     
    	function _clean($max)
    	{
    		echo '-clean-';
    		return 1;
    	}
     
    	@session_destroy();//just in case
    	ini_set("session.save_handler", "user");
    	if ( !session_set_save_handler('_open', '_close', '_read', '_write', '_destroy', '_clean') ) {
    		echo 'pas ok';
    	}
    ?>
    Et quand je cree le fichier de test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php 
    $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; 
    include_once($DOCUMENT_ROOT.'/Prot/sessions.inc.php'); 
    session_start(); 
    session_register('foobar', 'toto');
    if ( isset($_SESSION['foobar'])) {
      echo $_SESSION['foobar'];
    } else {
      echo '-unregistered var.';
    }
    ?>
    J'obtiens uniquement la trace suivante :
    -open-read-unregistered var.

    Une idee ??

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    hehe
    le callbacks est appelé une fois que ton buffer de sortie est vidé. Ce qui veut dire qu'on ne PEUT PAS afficher qq chose par la fonction _write()
    Ce qui veut dire aussi qu'il ne faudra pas utiliser dans ta page une variable de session enregistrée dans la meme page.
    exemple:
    <?php
    $_SESSION['jone'] = 'smith';
    echo $_SESSION['jone']; // affiche rien
    ?>

    r'appelle ta page et la, t'affichera Smith.
    Plus d'infi
    http://www.phpbuilder.com/manual/en/...ve-handler.php

  5. #5
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    ou sinon, essaie pour visualiser la bonne execution de tes fonctions, de créer un fichier PHP séparé contenant
    que tu pourras appeler à la fin de chaque script que tu veux tester

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut session_set_save_handler : fonctionne pas
    Merci encore wamania pour les infos !!!

    Tes quelques conseils ont eclaire le movice que je suis et ont permi de cerner un peu mieux le probleme : c'est la fonction _write qui semble ne pas bien s'executer.

    En effet, selon tes conseils, j'ai cree un fichier texte dans lequel sont ecrites les donnees de session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    	function _write($id, $data)
    	{
    		$id = mysql_real_escape_string($id);
    		$data = mysql_real_escape_string($data);
     
    		Fnm = "suivi.txt";
    		$inF = fopen($Fnm,"a");
    		fwrite($inF,'['.$id.':'.$data.']');
    		fclose($inF);		
     
    		//... add session data to mysql
     
    		return 1;
     
    	}
    Maintenant, quand je teste avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    	$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; 
    	include_once($DOCUMENT_ROOT.'/Site/sessions.inc.php');
    	session_start();
    	$_SESSION['foobar'] = 3;
    ?>
    le fichier texte suivi.txt contient l'identification de session, mais prien concernant la variable de session foobar !!! (le fichier contient seulement [605d522e94d4618ed4a1295170bd6f7a:])

    Peut-etre ais-je mal configure quelque chose ?

    En tous cas, merci wamania pour tes conseils !!!

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut session_set_save_handler : fonctionne pas
    Bonjour,

    Ca y est, j'ai trouve le petit probleme concernant la fonction _write.

    Par contre, ce qui est etonnant, c'est que je dois inclure dans toutes mes pages utilisant les donnees de la session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; 
    include_once($DOCUMENT_ROOT.'/Site/sessions.inc.php'); 
    session_start();
    Sinon, les donnees de la session sont perdues quand je change de page bien qu'appelant session_start() ...

    Je pensais que la fonction session_set_save_handler ne devait etre executee qu'une seule fois et qu'apres, plus besoin de la rappeler !!!
    Mais cela me semble tres bizarre.

    Suis-je dans l'erreur ou faut il bien appeler session_set_save_handler a chaque fois que l'on veut utiliser les donnees de la session ???

    Si quelqu'un peut m'eclairer sur la bonne demarche a mettre en oeuvre, je suis preneur !!!
    Merci !!!

  8. #8
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    Ca y est, j'ai trouve le petit probleme concernant la fonction _write
    C'était quoi alors?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut session_set_save_handler : fonctionne pas
    Il s'agissait juste d'une requete mysql qui plantait du fait que j'avais oublie de mettre les caracteres d'echappement... Aussi stupide que cela ... -quel boulet !!!-

    A present, je me demande donc s'il est normal ou non d'appeler session_set_save_handler dans tous les scripts utilisant les sessions.
    A priori, un seul appel a session_set_save_handler pour initialiser le nouveau "modele" de gestion des sessions, puis on peut utiliser session_start comme par defaut. Ce qui semblerait etre logique. Mais cela ne fonctionne malheureusement pas : en effet je suis oblige d'appeler session_set_save_handler puis session_start dans tout mes scripts pour pouvoir acceder aux donnees de la session... Peut-etre que cela vient du fait que je sois oblige de faire un appel a ini_set("session.save_handler", "user"); car ne pouvant modifier le php.ini ???

    Si quelqu'un a une info...

  10. #10
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    A present, je me demande donc s'il est normal ou non d'appeler session_set_save_handler dans tous les scripts utilisant les session
    s

    je pense que oui, car sinon, on tourne en rond, il faut les session pour garder la config, il faut la config pour accéder à la session.

    comme si tu mettais tes variables de connexion à mysql dans ta base....

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/01/2004, 12h14
  2. [FP]Writeln ne fonctionne pas !
    Par néo333 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 02/11/2003, 00h47
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 11h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 17h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 01h10

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