Question

J'ai hérité d'un ancien code PHP qui a été écrit alors qu'il était courant d'utiliser register_globals (Depuis PHP 4.2.0, cette directive est désactivée par défaut, version 22.avril 2002).

Nous savons maintenant qu'il est mauvais pour la sécurité de l'activer.Le problème est de savoir comment trouver tous les endroits du code où je dois utiliser $_GET ou $_POST?Ma seule pensée était de configurer le rapport d'erreurs pour avertir des variables non initialisées, puis de tester chaque partie du site.Existe-t-il un moyen plus simple ?Dois-je tester chaque chemin de code sur le site ou PHP donnera-t-il un avertissement par fichier ?

Était-ce utile?

La solution

Si vous définissez le rapport d'erreurs sur E_ALL, il avertit dans le journal des erreurs des variables non définies avec le nom de fichier et le numéro de ligne (en supposant que vous vous connectez à un fichier).Cependant, il ne vous avertira que s'il rencontre une variable non définie, je pense donc que vous devrez tester chaque chemin de code.Exécuter php à partir de la ligne de commande ne semble pas non plus aider.

Il existe un outil de débogage nommé xdebug, je ne l'ai pas essayé, mais peut-être que cela peut être utile ?

Autres conseils

j'ai écrit un scénario en utilisant le Tokeniseur les fonctions.C'est assez difficile mais cela a fonctionné pour la base de code sur laquelle je travaillais.Je crois que tu pourrais aussi utiliser CodeSniffer.

Vous pouvez manuellement « simuler » l'effet global du registre, mais ajouter un peu de sécurité.(J'ai en partie récupéré cela du fork d'osCommerce appelé xoops)

//  Detect bad global variables
$bad_global_list = array('GLOBALS', '_SESSION', 'HTTP_SESSION_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_REQUEST', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_FILES', 'HTTP_POST_FILES');
foreach ($bad_global_list as $bad_global ) {
    if ( isset( $_REQUEST[$bad_global] ) ) {
        die('Bad Global');
    }
}

//  Make global variables
foreach ($_REQUEST as $name -> $value) {
    $$name = $value; // Creates a varable nammed $name equal to $value.
}

Bien que vous souhaitiez le modifier pour rendre votre code plus sécurisé, au moins en ajoutant vos variables de configuration globales (comme le chemin et l'URL de base) à la liste des variables globales incorrectes.

Vous pouvez également l'utiliser pour compiler facilement une liste de toutes les variables get/post utilisées pour vous aider à remplacer éventuellement toutes les occurrences de, par exemple $return_url, par $_REQUEST['return_url];

Je sais qu'il existe un moyen de définir les valeurs php.ini pour ce script avec une certaine commande, j'ai donc cherché et trouvé ceci aussi - Aller au dernier message de la page

J'ai également trouvé le post suivant qui peut être utile - Aller au dernier message de la page

J'ajouterai davantage si personne n'a trouvé de réponse mais je dois maintenant prendre un train.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top