Comment obtenir variables $ _GET en PHP
-
08-10-2019 - |
Question
Je travaille sur l'application il y a construit ans, qui a récemment cessé de fonctionner correctement. Ancien programmeur dit qu'il pourrait être accès à des variables $_GET
ou $_POST
sans les lire à partir $_GET[] array
, mais à travers le register_globals
Je veux demander: (par exemple de façon directe) Quelles sont les différentes façons d'accéder aux variables de $_GET
sans utiliser tableau $_GET[]
et, si possible, comment puis-je vérifier si cette application utilise l'un d'eux
Merci d'avance
EDIT : Les autres moyens dont je me souvenais était register_globals
, pas magic_quotes
. De plus, je ne veux pas utiliser , mais plutôt de détecter si elle a été utilisée et dernière mise à jour du serveur dépréciée (ce que pourrait expliquer pourquoi l'application a cessé de fonctionner correctement)
EDIT : Mon anglais est horrible aujourd'hui. Comme je l'ai expliqué dans l'une des réponses: Je dois vérifier, si programmeur d'origine utilisé une méthode obscure et / ou désapprouvée d'obtenir des variables de chaîne de requête à PHP, l'application des valeurs fonctionne maintenant avec sont mal / non initialisées
IMPORTANT EDIT : import_request_variables
est sur la table, il ne sert pas. Tous les tableaux de $_
sont sur la table aussi, car dernière mise à jour ne leur a cassé (=> ils encore du travail). Comment puis-je détecter les variables sont initialisés avec register_globals
?
UNE AUTRE EDIT : J'ai trouvé ceci:
foreach ($_POST as $k => $v) {
eval("\$".$k." = '".$v."';");
}
foreach ($_GET as $k => $v) {
eval("\$".$k." = '".$v."';");
}
Aurait-il été rompu par l'un des dernière Mises à jour (il y a 1 semaine.)?
La solution
Vous voulez dire par et Globals enregistrer pas Citations magiques ... BTW est pur Register Globals mal jamais les utiliser (et ils sont dépréciées depuis PHP 5.3.0)!
Modifier Si vous voulez vérifier si l'application utilisée Globals enregistrer, essayez de rechercher des valeurs de $_GET
comme variables. Par exemple, pour essayer de index.php?id=123
à la recherche de $id
dans le code PHP. Si vous trouvez cela ne signifie pas que le script utilise mais si Register Globals $id
vient de nulle part et n'est jamais initialisé / setted c'est un bon (mauvais!) Signe que l'application utilise Globals ... enregistrer
Autres conseils
$_SERVER["QUERY_STRING"]
vous donnera la chaîne GET brute.
Cela dit, cela sonne comme un problème qui doit être fixé à sa racine, et non pas à l'aide d'une autre variable.
Si les guillemets magiques sont un problème, faire une vérification pour savoir si elles sont activées, et de traiter les données entrantes en conséquence.
Vous avez également $ _REQUEST , import_request_variables , le codeur d'origine peut ont utilisé pour récupérer le contenu d'une variable GET et l'insérer dans une autre variable qui est ensuite référencé par la suite.
est un Globals enregistrer fonctionnalité horrible programmes PHP anciens se fondent souvent sur.
Avec register globals enclenchés, PHP se penchera sur les variables GET et POST et les « promouvoir » aux noms de variables normales -. Par exemple $_GET['myvar']
seraient accessibles dans le code comme $myvar
Entre autres, ce qui rend le programme très facile pour les pirates de briser tout simplement en essayant de deviner ce que les autres noms de variables le programmeur peut-être utilisé. Le registre des caractéristiques globals a donc été désactivé par défaut depuis longtemps, est maintenant officiellement désapprouvée, et sera complètement supprimée dans une version future.
Parce que les variables utilisées de cette manière sont référencés d'une manière qui ne se distingue pas des variables normales, cela signifie que d'essayer de mettre à jour l'ancien code que les utilisations peuvent register globals être très difficile. Cela ne dépend beaucoup de la façon dont le code est écrit.
Le problème est probablement PHP de register_globals
. Cette option permet $_GET['some_var']
ou leur version équivalente $_POST
disponible $some_var
automatiquement. Ceci est dépréciée et vous devriez certainement pas l'utiliser, mais l'autre programmeur aurait pu les utiliser dans cette application.