Maison >développement back-end >tutoriel php >Pourquoi Register_Globals est-il dangereux en PHP ?

Pourquoi Register_Globals est-il dangereux en PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-17 19:27:02942parcourir

Why is Register_Globals Dangerous in PHP?

Comprendre Register_Globals et Global Keyword en PHP

Lorsque vous travaillez avec des applications Web, il est essentiel de comprendre les concepts de register_globals et du mot-clé global dans PHP.

Qu'est-ce que Register_Globals?

La directive register_globals enregistre automatiquement les éléments du tableau $_REQUEST en tant que variables. Cela signifie que toutes les données soumises via des formulaires (via POST ou GET) sont immédiatement accessibles en tant que variable PHP portant le nom du champ de saisie correspondant.

Bien que cette fonctionnalité puisse sembler pratique au départ, elle expose l'application à vulnérabilités de sécurité. Les attaquants peuvent manipuler la chaîne de requête URL ou les données du formulaire soumis pour définir des variables arbitraires et potentiellement obtenir un accès non autorisé. Par conséquent, il est fortement conseillé de désactiver register_globals pour des raisons de sécurité.

Exemple :

Considérez un scénario dans lequel un formulaire de connexion permet aux utilisateurs de soumettre leur nom d'utilisateur et leur mot de passe. Avec register_globals activé, un attaquant pourrait ajouter ce qui suit à l'URL :

?username=admin&password=secret

Cela définirait automatiquement les variables $username et $password dans le script PHP, permettant à l'attaquant de contourner le processus d'authentification.

Qu'est-ce que le mot-clé global ?

Le mot-clé global a un objectif différent et n'a aucun rapport avec registre_globals. Il permet d'accéder ou de modifier des variables définies en dehors d'une fonction au sein de cette fonction.

Exemple :

$foo = 'bar';

function baz() {
    echo $foo; // PHP generates a warning as $foo is undefined within this scope
}

function buzz() {
    global $foo; // Enables access to the global variable $foo
    echo $foo; // Prints 'bar' to the screen
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn