Je travaille sur une ancienne base de code, où les programmeurs ont supposé que register_globals sera toujours activé. Par conséquent, les variables sont utilisées sans préfixe $ _GET ou $ _POST, à peu près dans chaque page (la base de code est énorme, des centaines de scripts). J'ai essayé de l'éteindre, mais le tout premier script (script de connexion) se déroule sur une boucle infinie. Je comprends que passer par un script à la fois, et une ligne à la fois et corriger les variables est probablement la seule option (en ajoutant le préfixe $ _GET ou $ _POST selon le cas). Est-ce que quelqu'un a déjà fait ça? Comment l'as-tu fait? Aucun conseil?PHP - désactiver les globals de registre, quelle est la meilleure façon de corriger le code?
Répondre
Cela peut entraîner plus de dégâts que de bien, mais:
- Grep les
name="foo"
éléments de formulaires dans une liste seperated CSV ou d'une ligne quelque chose et obtenir l'attributaction
(uniquement si elle se rapporte à un script réel) - parcourez la liste CSV ou séparés par des lignes et effectuez une recherche et un remplacement en utilisant sed pour remplacer $ currentval par $ _POST ['currentval']/$ _ GET ['currentval'] ou $ _REQUEST ['currentval'] (mais attention aux cookies)
par exemple:
grep -o -E "(action|name)=\"[a-zA-Z0-9_]+\"" formfile.php | sed -E "s/.*\"([a-zA-Z0-9_]+)\"/\\1/" > vars.list
vous donnera une liste séparée de la ligne de variables affichées (ish) que vous pouvez parcourir dans un script bash ou quelque chose pour remplacer les vars.
EDIT
Si vous souhaitez activer register globals sur pour un site. Ajouter à votre .htaccess
ou configuration d'Apache:
php_value register_globals "On"
Vous pouvez répliquer register_globals
en utilisant le code suivant:
foreach ($_REQUEST as $var => $val) $$var = $val;
Tout ce que vous devez ensuite faire est de trouver un moyen d'avoir cette course en ligne avant chaque scénario. Vous pouvez le faire de plusieurs façons:
- Copiez et collez-le au début de chaque fichier;
- En utilisant
mod_rewrite
de manière à transformer chaque requête en (par exemple)register_globals.php?forward_to=originally_request_file.php
oùregister_globals.php
contient l'annonce de ligne ci-dessus puis inclut le fichier$_GET['forward_to']
; - Il existe une directive
auto_prepend_file
dans votre configuration PHP qui exécutera un script spécifique avant que chaque fichier ne soit exécuté comme d'habitude. Vous pourriez le faire pointer vers un fichier avec la ligne ci-dessus. En savoir plus: http://php.net/auto-prepend-file
plus à un point (3), vous pouvez le définir dans le fichier .htaccess
comme suit:
php_value auto_prepend_file /var/www/register_globals.php
C'est une idée assez soignée, mais n'est-ce pas juste comme laisser des globals de registre sur ?? Peut-être pire?Je me demande si '' ferait ce que je pense là;) –
Hm, quand j'ai lu la question que je pensais OP était chercher le meilleur moyen de faire fonctionner le script sans avoir à retourner 'register_globals' dans la configuration, contrairement à sa priorité étant que le script a fonctionné directement en utilisant' $ _GET' ou '$ _POST'. – icio
cela équivaut juste à utiliser la fonction extract(), n'est-ce pas? –
- 1. Quelle est la meilleure façon de simplifier le code suivant?
- 2. python - Quelle est la meilleure façon d'activer/désactiver la journalisation?
- 3. Quelle est la meilleure façon de charger la balance? PHP
- 4. Quelle est la meilleure façon d'organiser le code orienté objet?
- 5. Quelle est la meilleure façon de tester les services WCF?
- 6. Quelle est la meilleure façon de gérer les chaînes temporaires?
- 7. Quelle est la meilleure façon de gérer les images cassées?
- 8. Quelle est la meilleure façon de vérifier si le code C a déprécié les appels POSIX?
- 9. quelle est la meilleure façon de modifier le fichier csv
- 10. Quelle est la meilleure façon de suivre les visiteurs uniques?
- 11. Quelle est la meilleure façon d'automatiser le remplacement de texte?
- 12. Quelle est la meilleure façon de gérer les exceptions ObjectDataSource?
- 13. Quelle est la meilleure façon de diviser les données de chaîne qui est délimité dans php
- 14. Quelle est la meilleure façon d'implémenter un contrôleur en PHP?
- 15. Quelle est la meilleure façon de modifier/compiler le code source des projets open source?
- 16. Quelle est la meilleure façon de lire les données CSV?
- 17. Quelle est la meilleure façon de tester les réponses XML?
- 18. Quelle est la meilleure façon d'utiliser l'API Twitter via PHP?
- 19. Meilleure façon de documenter le code AJAX + PHP?
- 20. Quelle est la meilleure façon d'obtenir un HashTable en PHP?
- 21. Quelle est la meilleure façon de passer au codage MVC?
- 22. Quelle est la meilleure façon d'implémenter hashCode()?
- 23. Quelle est la meilleure façon d'exécuter `sum_by_sql`?
- 24. Quelle est la meilleure façon de trouver et de remplacer le code "! = Null" avec andand?
- 25. Quelle est la meilleure façon de détecter le code de pays d'un site Web?
- 26. quelle est la meilleure façon de php pour inverser les lettres dans les mots
- 27. Quelle est la meilleure façon d'apprendre WCF?
- 28. quelle est la meilleure façon d'exécuter le script shell (avec les privilèges root) via PHP?
- 29. Quelle est la meilleure façon de détecter la couleur blanche?
- 30. Quelle est la meilleure façon d'apprendre CUDA?
bonne chance, je me sens pour vous. – Jacco
@ Jacco, Second. –