2009-03-30 10 views
0

J'ai un site d'administration que j'ai copié sur un nouveau serveur pour tester les bogues et les mettre en ligne, ainsi que d'autres sites.Cela vaut-il la peine de corriger un système d'administration sur lequel REGISTER GLOBALS est activé?

L'administrateur semble avoir activé REGISTER GLOBALS et l'utilise pour la plupart des 300 fichiers php.

Étant donné que vous devez vous connecter à ce système, est-ce que cela vaut la peine de travailler sur les semaines de travail pour re-coder toutes les variables? Ou être heureux que je voudrais corriger chaque page que j'ajoute une nouvelle fonctionnalité à l'avenir?

Est-ce que Register Globals laisse des problèmes dans le code qui a été nettoyé, si nous ne réparons pas tout à la fois? Je suppose que cela pourrait être que $ user_id peut être défini par n'importe quel global.

Répondre

0

Register_Globals est non sécurisé et ne doit pas être utilisé. Si j'étais vous je réécrirais le code, ou l'application elle-même à partir de zéro. Cependant, si c'est un système d'administration, et personne ne connait son URL et que seul l'administrateur lui-même peut y accéder, alors vous ne devriez pas le changer (assurez-vous que son URL reste secrète)

+0

L'obscurcissement n'est pas une sécurité. –

+0

register_globals n'est pas plus fondamentalement insécure que mysql_query(). Bien sûr, vous pouvez créer des failles de sécurité en abusant de cela, mais cela s'applique à peu près n'importe quoi. – cletus

+0

@Cletus, d'accord, mais il y a une forte probabilité que vous laissiez une de ces failles dans votre code lors de l'utilisation de reg_globals. Par conséquent, je vous recommande de le réécrire si vous n'êtes pas sûr, ou du moins de revoir tout le code –

0

à certains problèmes de sécurité très graves, cela dépend un peu de la façon dont il est codé.

Par exemple:

<?php 
// $loggedin comes from $_SESSION['loggedin'] 
if($loggedin) 
{ 
    echo 'Loggedin!'; 
} 
else 
{ 
    echo 'Please login'; 
} 
?> 

Le principal problème est ici, est que le script ne vérifie pas où loggedin de $ provient. Donc, si je devais faire script.php? Loggedin = 1, je serais connecté. Vu qu'il y a ~ 300 fichiers PHP, il serait difficile de tout vérifier.

Donc le garder est une (très) mauvaise idée. Même si vous utilisiez .htaccess pour bloquer l'accès, cela conduirait probablement à des problèmes dans le futur (réglage de l'hébergeur Web IE REGISTER_GLOBALS) et de la confusion.

0

Ne pas réécrire tout le système. Si le système fonctionne et que vous allez le mettre à niveau en cours de route, vous n'avez pas besoin de recommencer à zéro.

Je voudrais peser l'importance d'adresser les registres Globals basé sur la sensibilité de l'information.

Si c'est un système bien construit, vous devriez être en mesure de voir quelles variables sont utilisées dans tout le site et de les rendre simplement disponibles en haut des pages. Méfiez-vous de toutes les fonctions qui tirent leurs données à travers $ this, $ cela;

Mon vote, si les données sont importantes à protéger, est de faire le travail.

1

Cette application pourrait être jonchée de nombreuses autres pratiques de programmation de mauvaise qualité. (Quelle est la taille de l'application pour justifier 300 fichiers php?). Si c'est le cas, il pourrait être judicieux de laisser l'application telle quelle et de coder une nouvelle version à partir d'un cadre décent si la maintenance est déjà devenue trop compliquée.

+0

Cela a un certain attrait, mais le travail sur les systèmes d'administration CMS à recoder prend toujours beaucoup plus de temps que prévu après que les paramètres non documentés sont trouvés – tristanbailey

0

Cela dépend de votre quotidien.Juste pour en nommer quelques-uns:

  1. la politique de sécurité de l'entreprise
  2. Coût de réécrire
  3. L'importance de l'application
  4. Impact sur d'autres parties de l'application.
  5. etc
1

Je register_globals de la désactiver php.ini et mettre un bloc de code en haut de chaque script qui extrait les variables du _REQUEST $, $ _GET ou $ _POST, quelque chose comme:

$nVars = extract($_GET, EXTR_SKIP); 

Le code ci-dessus enregistre les variables sous le même nom que la clé du tableau transmis. C'est utile pour refactoriser rapidement le vieux code activé par REGISTER_GLOBALS, mais vous devez faire attention. Lisez l'extrait de la documentation PHP extract() suivante:

Ne pas utiliser extract() sur des données non fiables, comme entrées utilisateur ($ _GET, ...). Si vous faites, par exemple, si vous voulez terme ancien code qui repose sur register_globals temporairement, assurez- que vous utilisez l'un des extract_type non-écrasement valeurs telles que EXTR_SKIP et être conscient que vous devez extraire dans la même commande définie dans variables_order dans le fichier php.ini.

Questions connexes