69 votes

Quelles sont register_globals en PHP?

Quelqu'un peut-il donner des exemples de ce register_globals sont?
Et est - global $user_id; considéré comme un registre mondial?

110voto

Tim Points 1385

L' register_globals directive:

register_globals interne de PHP paramètre qui enregistre l' $REQUEST éléments du tableau de variables. Si vous soumettez une valeur dans un formulaire, via POST ou GET, la valeur de cette entrée sera automatiquement accessible via la variable dans le script PHP, nommée d'après le nom du champ de saisie.

En d'autres termes, si vous avez soumis un formulaire contenant un username champ de texte, l'expression ($username === $_POST['username']) au tout début du script serait de retour true.

Sa notoriété est due au fait qu'il ouvre beaucoup de trous de sécurité, en particulier pour les personnes qui suivent rien de moins qu'une stricte style de codage à partir d'un point de vue sécurité.

Exemple classique:

if(user_is_admin($user))
{
    $authorized = true;
}

if($authorized)
{
    // let them do anything they want
}

Maintenant, si vous avez visité ce script dans un navigateur web et le serveur avait register_globals sur, vous pouvez simplement ajouter ?authorized=1 de l'URL et le dieu-mode sera activé!

L' global mot-clé:

global - a peu à voir avec register_globals.

Voici un exemple de son utilisation:

$foo = 'bar';

baz();

function baz()
{
    echo $foo; // PHP warns you about trying to use an uninitialized variable
               // and nothing is output (because $foo doesn't exist here)
}

buzz();

function buzz()
{
    global $foo; // Enables the use of $foo in this scope

    echo $foo; // Prints 'bar' to screen
}

24voto

Aajahid Points 411

Tout le monde mentionner GET, POST, REQUEST, COOKIE a d'effet sur register_globals=on.

Je suis juste écrit ce que vous sachiez que -

$_SESSION seront affectés aswell en raison de register_globals=on. http://php.net/manual/en/security.globals.php

Cela signifie que si vous faites comme suit -

$_SESSION[x] = 123;
$x = 'asd';
echo $_SESSION[x];

La sortie sera asd.

Ce qui va causer de sérieux problèmes de sécurité et de bugs. J'ai vécu une mauvaise chose récemment, à l'occasion à l'aide de Hostgator d'hébergement partagé. Par Défaut, ils ont register_globals=on.

17voto

BarsMonster Points 3484

Lorsque vous avez register_globals=on, quelque chose de passé par GET ou POST ou COOKIE apparaît automatiquement à la variable globale dans le code, cela pourrait avoir des conséquences sur la sécurité.

I. e. vous cliquez sur l'url de test.le php?access_level=100 et vous aurez $access_level = 100 en PHP.

Quand vous faites global $somevar - vous de faire votre propre variable globale, qui n'est généralement pas un gros problème.

11voto

NAVEED Points 16576

Le register_globals paramètre contrôle la façon dont vous accédez à la forme, serveur, et de l'environnement. les variables.

register_globals=On :

Vous pouvez accéder à la forme de l'attribut sans Tableaux Globaux ( GET [] POST[] & DEMANDE[] )

exemple: http://www.example.com/one.php?myinput=abc

Vous pouvez accéder directement à one.php

echo $myinput; // abc

register_globals=Off :

Vous avez accès à tous les attributs uniquement par des Tableaux Globaux.

exemple: http://www.example.com/one.php?myinput=abc

Vous avez accès à one.php

echo $_GET['myinput']; //abc

6voto

Randal Schwartz Points 9756

Mal. Le mal pur. Je ne sais pas ce que Rasmus a été pensée. :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X