[Register_globals]



  • Bonjour.

    Pourquoi "Register_globals" est activé ?
    Est il possible de le désactivé



  • Il est activé car un certain nombre de développeurs (voire un nombre certain) codent mal ou sont inconcients des failles de sécurité que celà introduit dans les scripts. Mais comme ce sont des codes parfoit connus, freeheberg est obligé de l'activer pour ne pas risquer de voir apparaitre des erreurs dans 50% des sites.
    Et non, il n'est pas possible de le désactiver.

    Mais…

    		# Désactivation de register_globals
    			if(ini_get('register_globals')=='1') {
    				foreach($_REQUEST as $clef => $valeur) {
    					if($clef{0}!=='_') unset($GLOBALS[$clef]);
    				}
    			}
    ```Et voilà, plus de REGISTER_GLOBALS! Ce code est le Saint-Graal.


  • Sans être indiscret : "C'est quoi les Register_globals ???"

    ^^ :lol:



  • Supposons que tu aille sur la page:

    http://www.test.fr/index.php?var1=BooWoo

    Une variable $_GET['var1'] sera créée, et contiendra "BooWoo".
    Le problème, c'est qu'avec REGISTER_GLOBALS, une autre variable $var1 sera créée, et contiendra "BooWoo".
    Ce qui pose parfois d'énorme problèmes de sécurité.

    Par exemple, ce script est totalement insécurisé:

    <?php
    	if($_SESSION['logged']===true) $logged = true;
    	if($logged) {
    		echo 'Vous êtes rentré';
    	} else {
    		echo 'Accès refusé';
    	}
    ?>
    ```En effet, si on va sur adresse_cible.php?logged=babebibobu une variable $logged sera créé et contiendra babebibobu. Comme l'utilisateur n'est pas connecté, cette valeur ne changera pas (elle ne sera mise à true que si $_SESSION['logged'] l'est). Or, tout ce qui n'est pas false est true, par définition. Donc le pirate aura accès à l'espace privé de cette manière.
    Un code sécurisé aurait été le suivant, qui donne une valeur par défaut à $logged, de manière à ce que quoi que mette le pirate, $logged soit égal à false si l'utilisateur n'est pas connecté:
    

    <?php
    $logged = false;

    if($_SESSION['logged']===true) $logged = true;
    if($logged) {
    	echo 'Vous êtes rentré';
    } else {
    	echo 'Accès refusé';
    }
    

    ?>

    Pour quatre lignes, on en économise cent.
    
    Il faut donc TOUJOURS supprimer ces dernières, même (voire surtout) si on ne les utilise pas. Elles laissent des failles énormes dans les scripts. Le seul problème que rencontrera le pirate dans une attaque de ce type sera de savoir quelles variables modifier de cette manière. Et s'il s'git d'un script connu…je laisse imaginer le désastre.


  • Donc au final, il faut mieux l'activer ou le désactiver (j'ai compris mais pas tout :? ) ???



  • l'activer



  • Il faut le désactiver.



  • l'activer

    Donc ta rien comprit de ce que arcanis vient de dire…

    REGISTER_GLOBALS a On crée des failles de sécurité grosse comme des maisons, car bon nombre de programmeur on la mauvaise habitude de codé avec.

    En gros tu peux crée des varibles directement dans le code source pendant sont exécution a cause de REGISTER_GLOBALS ON... Tu n'as aucune controle sur ce que l'utilisateur envoie...

    Perso, je teste TOUT ce qui vient de l'utilisateur pour savoir si c'est bon... Sinon je l'éjecte...



  • Je parlez en pensant a ceci :

    Il est activé car un certain nombre de développeurs (voire un nombre certain) codent mal ou sont inconcients des failles de sécurité que celà introduit dans les scripts. Mais comme ce sont des codes parfoit connus, freeheberg est obligé de l'activer pour ne pas risquer de voir apparaitre des erreurs dans 50% des sites.
    Et non, il n'est pas possible de le désactiver.
    
    


  • Il est activé et ne peut pas être désactivé précisemment (sauf peut-être en passant par les php_flag), mais on peut le désactiver avec le code que j'ai donné. Donc il faut l'utiliser pour désactiver register_globals (en même temps que celui pour retirer les magic_quotes, tant qu'on y est ;) ).



  • Ouep, mai ou le mettre ? XD j'utilise un cms :/



  • Au début de la page php (juste après <?php).
    Par contre, il est possible que ton cms soit mal codé et qu'il utilise les REGISTER_GLOBALS, auquel cas tu devra soit laisser les failles, soit changer de cms.



  • Donc si j'ai bien compris :

    • on rajoute ce code en haut de chacune de ses pages :
          # Désactivation de register_globals 
             if(ini_get('register_globals')=='1') { 
                foreach($_REQUEST as $clef => $valeur) { 
                   if($clef{0}!=='_') unset($GLOBALS[$clef]); 
                } 
             }
    
    • si on voit apparaître pein d'erreur, c'est qu'on code mal et on enlève le code.
    • si on code bien, on le laisse pour plus de sécurité.

    Je me trompe ?



  • Non, c'est bon! :)

    Pour info sur le code lui-même:

    • $_REQUEST contient l'ensemble des variables GET, POST, COOKIE, SESSION, FILES (je ne suis pas sûr de ce dernier, mais je crois).
    • $GLOBALS contient l'ensemble des variables existantes sous forme de tableau. Toute modification apportée à cette variable agit sur la variable désignée.
    • Donc on supprime au fur et à mesure les variables dont le nom est présent dans $REQUEST, et pour plus de sécurité on ne supprime pas les variables $****, parce que je ne sais pas s'il est possible de les contourner (du style: http://www.test.fr/index.php?_POST=test, qui forcerait à détruire l'ensemble du tableau $_POST).

Se connecter pour répondre
 

Il semble que votre connexion ait été perdue, veuillez patienter pendant que nous vous re-connectons.