En étudiant la doc officielle, je suis tombé sur le bout de code (...doc
php.../faq.misc.html#faq.misc.registerglobals) qui permet d'émuler un
register_globals à off lorsque la directive est à on. Le truc qui
m'interpelle quelque part c'est le deuxième bloc d'instruction :
if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
die('GLOBALS overwrite attempt detected');
}
Je n'arrive pas à trouver comment ce truc peut-être exploité ; pourtant
il y a bien une raison si c'est dans la doc, non ?
Par ailleurs, ai-je la berlue ou $GLOBALS a-t-il une clef qui
l'auto-référence (ce que je n'ai pas vu dans la doc) ? Chez moi,
<?php // testglob.php
if (isset($GLOBALS['GLOBALS'])) {
echo "pouet\n";
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
m-e-
"btzaf" a écrit dans le message de news: 453a49f2$0$16857$
Bonjour,
En étudiant la doc officielle, je suis tombé sur le bout de code (...doc php.../faq.misc.html#faq.misc.registerglobals) qui permet d'émuler un register_globals à off lorsque la directive est à on. Le truc qui m'interpelle quelque part c'est le deuxième bloc d'instruction :
if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) { die('GLOBALS overwrite attempt detected'); }
Je n'arrive pas à trouver comment ce truc peut-être exploité ; pourtant il y a bien une raison si c'est dans la doc, non ?
Je suppose que c'est en rapport avec ça : http://bugs.php.net/bug.php?id1440 [en] Où on explique qu'il est (était) possible, avec register_globals activé, de remplacer GLOBALS par n'importe quoi grâce aux variables de requête. Ainsi je suppose que sans cette vérification la fonction "unregister_GLOBALS" pourrait ne plus fonctionner (puisqu'elle viderait un faux tableau GLOBALS).
Par ailleurs, ai-je la berlue ou $GLOBALS a-t-il une clef qui l'auto-référence (ce que je n'ai pas vu dans la doc) ?
Non, c'est bien le cas : $GLOBALS est une super-globale et apparaît à ce titre dans lui-même.
"btzaf" <btzaf@free.fr> a écrit dans le message de news:
453a49f2$0$16857$426a34cc@news.free.fr...
Bonjour,
En étudiant la doc officielle, je suis tombé sur le bout de
code (...doc
php.../faq.misc.html#faq.misc.registerglobals) qui permet
d'émuler un
register_globals à off lorsque la directive est à on. Le truc
qui
m'interpelle quelque part c'est le deuxième bloc d'instruction
:
if (isset($_REQUEST['GLOBALS']) ||
isset($_FILES['GLOBALS'])) {
die('GLOBALS overwrite attempt detected');
}
Je n'arrive pas à trouver comment ce truc peut-être exploité ;
pourtant
il y a bien une raison si c'est dans la doc, non ?
Je suppose que c'est en rapport avec ça :
http://bugs.php.net/bug.php?id1440 [en]
Où on explique qu'il est (était) possible, avec register_globals
activé, de remplacer GLOBALS par n'importe quoi grâce aux
variables de requête.
Ainsi je suppose que sans cette vérification la fonction
"unregister_GLOBALS" pourrait ne plus fonctionner (puisqu'elle
viderait un faux tableau GLOBALS).
Par ailleurs, ai-je la berlue ou $GLOBALS a-t-il une clef qui
l'auto-référence (ce que je n'ai pas vu dans la doc) ?
Non, c'est bien le cas : $GLOBALS est une super-globale et
apparaît à ce titre dans lui-même.
"btzaf" a écrit dans le message de news: 453a49f2$0$16857$
Bonjour,
En étudiant la doc officielle, je suis tombé sur le bout de code (...doc php.../faq.misc.html#faq.misc.registerglobals) qui permet d'émuler un register_globals à off lorsque la directive est à on. Le truc qui m'interpelle quelque part c'est le deuxième bloc d'instruction :
if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) { die('GLOBALS overwrite attempt detected'); }
Je n'arrive pas à trouver comment ce truc peut-être exploité ; pourtant il y a bien une raison si c'est dans la doc, non ?
Je suppose que c'est en rapport avec ça : http://bugs.php.net/bug.php?id1440 [en] Où on explique qu'il est (était) possible, avec register_globals activé, de remplacer GLOBALS par n'importe quoi grâce aux variables de requête. Ainsi je suppose que sans cette vérification la fonction "unregister_GLOBALS" pourrait ne plus fonctionner (puisqu'elle viderait un faux tableau GLOBALS).
Par ailleurs, ai-je la berlue ou $GLOBALS a-t-il une clef qui l'auto-référence (ce que je n'ai pas vu dans la doc) ?
Non, c'est bien le cas : $GLOBALS est une super-globale et apparaît à ce titre dans lui-même.