Désactiver register_globals et les magic_quotes

2009, Jul 26    

Il y a quelques temps, dans les commentaires sur l’article traitant de OVH et PHP 5, nous avons abordé le problème des magic quotes et du register globals.

Pour des questions de sécurité il est conseillé de les désactiver. Pour les magic_quotes, PHP 6 s’en chargera … Mais bon, quand on voit que OVH est encore en PHP 4, on se dit que le problème n’est pas encore réglé ^^.

Dans tout mes projets, lorsque j’appelle mon fichier de configuration je désactive les magic_quotes et je mets le register_globals à off. Voici donc le contenu de mon init.conf.php :

Désactivation des magic_quotes :

/*
   suppression des magic quotes
   pour raisons de sécurités
- on met magic_quotes_runtime à 0 (désactivé)
- on désactive magic_quotes_runtime (0)
- si magic_quotes_gpc est activé, on le désactive
  pour tout les types de variable
*/
 
ini_set('magic_quotes_runtime', );
set_magic_quotes_runtime();
 
if (1 == get_magic_quotes_gpc()){
     function remove_magic_quotes_gpc(&$value){
          $value = stripslashes($value);
     }
 
     array_walk_recursive($_GET, 'remove_magic_quotes_gpc');
     array_walk_recursive($_POST, 'remove_magic_quotes_gpc');
     array_walk_recursive($_COOKIE, 'remove_magic_quotes_gpc');
}

Désactivation du register_globals :

/*
 
 Mise à off de register_globals (de base si version PHP > 4.2)
 pour des raisons de sécurité
 
- si register_globals est activé :
- on le désactive pour les sessions
- on le désactive pour toutes les variables
- on le met à off
*/
 
if(ini_get('register_globals')){
     $superglobals = array($_SERVER, $_ENV, $_FILES, $_COOKIE, $_POST, $_GET);
 
     if(isset($_SESSION)){
          array_unshift($superglobals, $_SESSION);
    }
 
    foreach ($superglobals as $superglobal){
         foreach ($superglobal as $global => $value){
              unset($GLOBALS[$global]);
         }
    }
 
     ini_set('register_globals', false);
}

Voilà, vous avez ma version pour partir sur de bonnes bases.