Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/08/2007, 11h07   #1
Invité de passage
 
Inscription : août 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 9
Points : 2
Points : 2
Par défaut [Sécurité] Mauvais transfert de variables entre scripts

Bonjour

Mon hébergeur (Skynet) à modifié le fichier register_globals et nous force à travailler avec des variables de sessions. Ce qui est beaucoup mieux, j'en conviens.

En 2003, j'avais développé un site (PHP3) et je transférais mes variables via l'URL. Ma page est construite dans un tableau construit avec des echo dans une boucle while. et tout marchait bien.

Chaque ligne du tableau est construite de la même façon. et les liens donnent ceci

Ma page de départ donne les liens suivants :

http://www.clici.be/www/fam_voir.php?id=151
http://www.clici.be/www/fam_voir.php?id=152
http://www.clici.be/www/fam_voir.php?id=153
http://www.clici.be/www/fam_voir.php?id=154

Le problème est que ma page d'arrivée reçoit toujours la même variable id, > dans ce cas ci 154 qui est la dernière ligne de mon tableau.

Or, on a beau voir que la variable id change dans l'url en bas du browser mais la variable transmise est toujours la dernière du tableau. Soit dans ce cas ci "154" .

Je présume que j'écrase à chaque fois ma variable.

Si j'ai bien compris, tous les scripts doivent démarrer par un "session_start"
et on transmet ainsi les variables de script en script.

Il y a donc un moyen d'intégrer la bonne variable dans la construction du lien a href ...

il faut probablement insèrer "$_session['id'][] = $id" dans la contruction du lien <a href> ... ou alors je me trompe complètement.

Ma question est donc, comment faire comprendre à PHP qu'il doit tenir compte de la bonne variable "id" ? Il y a autant de variables "id" que de lignes dans le tableau.

Quelqu'un peut il m'aider ? Pouvez vous me donner un exemple ou h ref tiendrait compte de la bonne variable ?

Merci beaucoup.
levince est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 12h55   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
la configuration de "register_globals" n'est pas directement lié aux sessions
maintenant pour récupérer les informations fournies dans l'URL, tu devras passer par la tableau $_GET
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 17h39   #3
Invité de passage
 
Inscription : août 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 9
Points : 2
Points : 2
Voici des morceaux de mes scripts, ça peut aider

Index.php :
Code :
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
<?php session_start(); 
$_session['id']= 1;
?>
...
 
//création du tableau ...
 
while ($famille = mysql_fetch_array ($resultat))
{
 
	if($color=="#FFFF99") $color="#99FFCC"; ELSE $color="#FFFF99";
 
 
 
	$id = $famille['famille_id']; // La variable qui change dans le tableau
 
// Construction du tableau qui envoit vers fam_voir.php
 
	echo "<TR BGCOLOR=".$color.">";
	echo "<td>$affich</td>";
	echo "<td>";
	echo "<div align=\"center\"><a href=fam_voir.php?id=".$id.">V</a>";
	echo "</td>";
	echo "</tr>";
}
echo "</table>";
 
...
fam_voir.php :
Code :
1
2
3
4
5
6
7
8
9
 
<?php session_start(); 
 
 
if(isset($_SESSION["id"])) 
      echo 'La variable "id" existe et vaut: ' . $_SESSION["id"]; 
else
echo 'id n\'existe pas ...';
?>
levince est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 21h00   #4
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
dans le fichier "fam_voir.php" tu peux récupérer les valeurs passées par l'URL dans le tableau $_GET donc tu as la valeur que tu cherches dans $_GET['id']
et pour ça tu n'as pas besoin des sessions
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 22h53   #5
Invité de passage
 
Inscription : août 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 9
Points : 2
Points : 2
Voilà, j'ai rajouté un

$_GET['id'];

mais hélas, rien n'y fait.

sur fam_voir.php, id n'existe pas ... pourtant, elle est bien transmise dans l'url ...

-- fam_voir.php

<?php session_start();

$_GET['id'];

if(isset($_SESSION["id"]))
echo 'La variable "id" existe et vaut: ' . $_SESSION["id"];
else
echo 'id n\'existe pas ...';
?>

Quid alors ???
levince est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 23h08   #6
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut c'est normal

Tu récupères avec $_GET et tu teste avec $_SESSION, fais:

Et afin de faciliter la migration future avec PHP6 utilise $_GET et non $HTTP_GET_VARS car si register_globals sera supprimée avec PHP6, register_long_arrays le sera également.
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 17h45   #7
Invité de passage
 
Inscription : août 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 9
Points : 2
Points : 2
Par défaut Il y a un net progrès

Merci à tous pour votre acharnement à nous aider tous. je sais que cela prend du temps car je fais aussi de la hotline ...

En effet, cela fonctionne mieux avec le bonnes variables ... Mais la suite est sans doute aussi simple à résoudre mais il faut le savoir comment, je m'explique ...

Ma fameuse variable id se transmet donc bien de script en script via la méthode de transfert par URL mais avec la methode post, cela ne fonctionne plus ... avant les modifs de mon FAI, j'avais pas de problèmes ...

Je veux contrôler le mot de passe de "id" sur la page mot_passe_modif.php. Sur cette page, "id" est bien présent mais cette fois ci j'emploie la méthode post dans le script pour transférer la variable "id" vers la page controle_modif.php

Et là, sur controle_modif, je perds la variable "id" ... snif !!!

Voici mon petit code

---- mot_pass_modif.php
Code :
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
 
<?php session_start(); 
 
if(isset($_GET['id'])) 
      echo 'La variable "id" existe et vaut: ' . $_GET['id']; 
else
      echo 'id n\'existe pas ...';
 
$id = $_GET['id'];
 
//print $id;
 
?> 
 
<html>
<head>
<title>Document sans titre</title>
</head>
 
<body>
<table width="100%" border="0">
  <tr> 
    <td><div align="center">Entrez votre mot de passe ...</div></td>
  </tr>
  <tr> 
    <td><form name="form1" method="post" action="controle_modif.php">
        <div align="center"> 
          <input type="password" name="passe">
          <input type= submit value = "Continuer">
          <input name="id" type="hidden" id="id" value="<?php echo $id ; ?>">
        </div>
      </form></td>
  </tr>
</table>
<p>&nbsp;</p>
</body>
</html>

---- controle_modif.php

Code :
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php session_start(); 
 
if(isset($_GET['id'])) 
      echo 'La variable "id" existe et vaut: ' . $_get["id"]; 
else
		echo 'id n\'existe pas ...';
 
 
//print $id;
 
//print ("variable = $passe<br>");
//print ("id = $id<br>");
 
// Controle pour modifications
//trouver son mot de passe
 
require_once("connexion.php");
 
$sql = "SELECT motpasse FROM famille where famille_id = '$id'";
$resultat = mysql_query ($sql);
while ($ligne=mysql_fetch_array($resultat))
{
$var = $ligne["motpasse"]; // stocke le mot de passe en mémoire ($var)
}
//if (($compte==$compte2) :: ($nom=="fabrice")):
//print($var);
//print($passe);
 
switch($passe)
 
{
case $var: // si la variable opération est égale à 1
//print ' Ok'; // on affiche cette phrase
$fichier = "fam_mod.php";
$lien = "Votre mot de passe est ACCEPTE, cliquez sur ce lien pour continuer";
 
break; // on referme cette condition 
 
case 'admin':// si la variable opération est égale à 2
//print 'admin'; 
$fichier = "fam_mod.php";
$lien = "Votre mot de passe est ACCEPTE, cliquez sur ce lien pour continuer";
 
break; 
 
default: // si la variable opération n'est pas égale à 1 ni à 2 ou si elle n'est pas définie
//print 'defaut'; // on affiche une phrase par défaut
$fichier = "index.php";
$lien = "Votre mot de passe est REFUSE, cliquez sur ce lien pour revenir en arrière";
 
} 
 
 
?>
  <tr> 
    <td><form name="form1" method="post" action="<?php echo $fichier ; ?>">
        <div align="center"> 
          <input name="id" type="hidden" id="id" value="<?php echo $id ; ?>">
          <input type= submit value = "<?php echo $lien ; ?>">
 
        </div>
      </form></td>
  </tr>
Quid alors ?
Pouvez vous m'aider à retrouver "id" ? ;-)
levince est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 18h40   #8
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
si tu envoies les données avec la méthode POST, tu trouveras tes données dans le tableau $_POST
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 22h06   #9
Invité de passage
 
Inscription : août 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 9
Points : 2
Points : 2
Par défaut Super, merci pour le coup de main.

Voilà, mon site est à nouveau sur pied.

Un grand merci à tous. Excusez moi si mes questions ont l'air débiles. Parce qu'en effet, les réponses sont tellement logiques.

Ceci dit, après cette remise à niveau, je ne vois pas l'utilité de session_start(), dumoins dans mon cas, c'est vrai que cela fonctionne aussi sans ...

Certainement une question de sécurité.

Je crois qu'elle a son utilité si on ne veut pas mélanger les variables des différentes sessions. MAis alors, toutes les variables doivent être transférées via $_session[] ?

Ai je bien compris ?

Un grand bravo pour le site ET pour son suivi, ça fait du bien de voir qu'on s'intéresse aussi aux nuls comme moi ... et quelle rapidité de réaction. Bravo à toute l'équipe !!!
levince est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 22h46   #10
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
la fonction "session_start" sert uniquement à mettre en place la session et à rendre disponible le tableau $_SESSION

regarde là pour des explications sur les sessions :
http://php.developpez.com/cours/sessions/
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h41.


 
 
 
 
Partenaires

Hébergement Web