Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Au sujet de $GLOBALS

1 réponse
Avatar
btzaf
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 ?

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";
}

print_r(array_diff($GLOBALS, $GLOBALS['GLOBALS']));
?>

renvoie :

pouet
Array
(
)

Merci d'avance pour vos lumières,

1 réponse

Avatar
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.