S�curit� et "Safe Mode"
Nom | Par d�faut | Modifiable | Historique |
---|---|---|---|
safe_mode | "0" | PHP_INI_SYSTEM | Supprim� en PHP 6.0.0. |
safe_mode_gid | "0" | PHP_INI_SYSTEM | Disponible depuis PHP 4.1.0. Supprim� en PHP 6.0.0. |
safe_mode_include_dir | NULL | PHP_INI_SYSTEM | Disponible depuis PHP 4.1.0.Supprim� en PHP 6.0.0. |
safe_mode_exec_dir | "" | PHP_INI_SYSTEM | Supprim� en PHP 6.0.0. |
safe_mode_allowed_env_vars | "PHP_" | PHP_INI_SYSTEM | Supprim� en PHP 6.0.0. |
safe_mode_protected_env_vars | "LD_LIBRARY_PATH" | PHP_INI_SYSTEM | Supprim� en PHP 6.0.0. |
open_basedir | NULL | PHP_INI_ALL | PHP_INI_SYSTEM en PHP < 5.3.0. |
disable_functions | "" | php.ini seulement | Disponible depuis PHP 4.0.1. |
disable_classes | "" | php.ini seulement | Disponible depuis PHP 4.3.2. |
Pour plus de d�tails sur les modes PHP_INI_*, reportez-vous � O� une directive de configuration peut �tre modifi�e.
Voici un �claircissement sur l'utilisation des directives de configuration.
- safe_mode bool�en
-
Active ou non le mode de s�curit� de PHP. Si PHP est compil� avec --enable-safe-mode, la valeur par d�faut sera On, sinon Off.
- safe_mode_gid bool�en
-
Par d�faut, le safe mode fait une comparaison des propri�taires, avant d'ouvrir un fichier. Si vous voulez all�ger un peu ce niveau de s�curit�, vous pouvez r�aliser une comparaison de groupe, et activer cette directive. Si cette directive vaut FALSE (sa valeur par d�faut), c'est une comparaison sur les UID, et, si elle vaut TRUE c'est une comparaison sur les GID.
- safe_mode_include_dir cha�ne de caract�res
-
Les v�rifications bas�es sur le UID ou GID sont ignor�es lorsque les fichiers inclus sont plac�s dans le dossier indiqu� par cette directive, ainsi que ses sous-dossiers. Les dossiers peuvent �tre aussi dans l'include_path ou bien il faut inclure le chemin complet.
Depuis PHP 4.2.0, cette directive utilise le point virgule de la m�me fa�on que le fait include_path, pour permettre de configurer plusieurs dossiers. La restriction sp�cifi�e est en fait un pr�fixe, plus qu'un nom de dossier. Cela signifie que "safe_mode_include_dir = /dir/incl" autorise aussi bien "/dir/include" que "/dir/incls", s'ils existent. Lorsque vous souhaitez restreindre l'acc�s � un dossier sp�cifique, il faut terminer cette directive avec un slash. Par exemple "safe_mode_include_dir = /dir/incl/". Si la valeur de cette directive est vide, aucun fichier avec le UID/GID diff�rent ne peut �tre inclus dans PHP 4.2.3 et dans les versions PHP 4.3.3 et plus r�centes. Dans les versions ant�rieures, tous les fichiers pouvaient �tre inclus. - safe_mode_exec_dir cha�ne de caract�res
-
Si PHP est utilis� en safe mode, les fonctions comme system() et toutes celles qui permettent l'ex�cution en ligne de commande refuseront d'ex�cuter des programmes qui ne sont pas dans ce dossier. Vous devez utiliser / en tant que s�parateur de dossier sous tous les environnements, y compris Windows.
- safe_mode_allowed_env_vars cha�ne de caract�res
-
Modifier certaines variables d'environnement est un trou de s�curit� potentiel. Cette directive contient une liste de noms de variables d'environnement s�par�es par des virgules, ou de pr�fixes. En Safe mode, l'utilisateur ne pourra modifier que les variables d'environnement dont le nom commence par l'un des pr�fixes fourni ici. Par d�faut, les utilisateurs ne peuvent modifier que les variables d'environnement qui commencent par PHP_ (e.g. PHP_FOO=BAR).
Note: Si cette directive est vide, PHP autorisera la modification de TOUTES les variables d'environnement.
- safe_mode_protected_env_vars cha�ne de caract�res
-
Cette directive contient une liste de variables d'environnement que le programmeur ne pourra pas modifier en utilisant la fonction putenv(). Ces variables seront prot�g�es, m�me si la directive safe_mode_allowed_env_vars autorise leur modification.
- open_basedir cha�ne de caract�res
-
Limite les fichiers accessibles par PHP dans l'arborescence. Cette directive n'est pas affect�e par le safe mode.
Lorsqu'un script tente d'ouvrir un fichier, avec les fonctions fopen() ou gzopen(), la situation du fichier est v�rifi�e. Si le fichier se situe hors du dossier sp�cifi� dans cette directive, PHP refusera de l'ouvrir. Les liens symboliques sont r�solus, ce qui fait que cette restriction ne peut �tre contourn�e par un lien symbolique. Si le fichier n'existe pas, le lien symbolique ne pourra pas �tre r�solu et le nom de fichier sera compar� � open_basedir.
La valeur sp�ciale
.
indique que le dossier dans lequel le script est stock� servira de dossier de base. Cela est cependant un peu dangereux car le dossier courant du script peut facilement �tre modifi� avec la fonction chdir().Dans httpd.conf, open_basedir peut �tre d�sactiv�e (i.e. pour certains h�tes virtuels) de la m�me mani�re que toute autre directive de configuration avec la syntaxe "php_admin_value open_basedir none".
Sous Windows, s�parez les dossiers par des points virgules. Sur les autres syst�mes, s�parez les dossiers avec des deux-points. Lorsque PHP est utilis� comme module Apache, les chemins de la directive open_basedir des dossiers parents sont automatiques transmis.
La restriction sp�cifi�e par open_basedir est en fait un pr�fixe et non un dossier. Cela signifie que "open_basedir = /dir/incl" donne acc�s au dossier "/dir/include" et aussi au dossier "/dir/incls" s'il existe. Lorsque vous souhaitez restreindre l'acc�s � un dossier sp�cifique, ajoutez un slash final. Par exemple : open_basedir = /dir/incl/.
La valeur par d�faut permet l'ouverture de tous les fichiers.
Note: Depuis PHP 5.3.0, open_basedir peut �tre modifi� au moment de l'ex�cution. Cela signifie que si open_basedir est d�fini � /www/ dans votre fichier php.ini, un script peut le modifier en /www/tmp/ au moment de l'ex�cution via la fonction ini_set().
- disable_functions cha�ne de caract�res
- Cette directive vous permet de d�sactiver certaines fonctions pour des raisons de s�curit�. Elle prend une liste de nom de fonctions, s�par�s par des virgules. disable_functions n'est pas affect�e par le Safe Mode. Cette directive doit �tre configur�e dans le fichier php.ini. Par exemple, vous ne pourrez pas la configurer dans le fichier httpd.conf.
- disable_classes cha�ne de caract�res
-
Cette directive vous permet de d�sactiver certaines classes
pour des raisons de s�curit�. Elle
prend une liste de nom de fonctions, s�par�es par des
virgules. disable_functions
n'est pas
affect�e par le Safe Mode.
Cette directive doit �tre configur�e dans le fichier php.ini. Par exemple,
vous ne pourrez pas la configurer dans le fichier
httpd.conf.
Note: Disponibilit�
Cette directive est disponible depuis PHP 4.3.2
Voir aussi register_globals, display_errors et log_errors.
Lorsque Safe Mode est actif, PHP v�rifie que le propri�taire du script courant est le m�me que le propri�taire des fichiers ou dossiers qui seront manipul�s par ce script. Par exemple, dans la situation suivante :
-rw-rw-r-- 1 rasmus rasmus 33 Jul 1 19:20 script.php -rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd
ex�cuter le script script.php :
<?php
readfile('/etc/passwd');
?>
g�n�rera cette erreur, si le Safe Mode est activ� :
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2
Cependant, il arrive que la v�rification faite avec le nom du propri�taire (UID) du fichier soit trop restrictive, et qu'une v�rification sur le nom du groupe (GID) soit suffisante. C'est une autre fonctionnalit� support�e par la directive safe_mode_gid. En lui donnant la valeur de On, les v�rifications seront faites sur le GID, alors qu'en lui laissant sa valeur par d�faut de Off, les v�rifications seront faites sur le UID.
Si au lieu d'utiliser le Safe Mode, vous utilisez la directive open_basedir, alors les manipulations seront limit�es aux fichiers situ�s dans les dossiers sp�cifi�s. Par exemple (Apache httpd.conf) :
<Directory /docroot> php_admin_value open_basedir /docroot </Directory>
Si vous ex�cutez le script script.php ci-dessus avec la configuration d'open_basedir, le r�sultat sera l'affichage suivant :
Warning: open_basedir restriction in effect. File is in wrong directory in /docroot/script.php on line 2
Vous pouvez �galement d�sactiver les fonctions particuli�res. Notez que la directive disable_functions ne peut �tre utilis�e en dehors du fichier php.ini, ce qui signifie que vous ne pouvez pas d�sactiver des fonctions par virtualhost ou par dossiers, dans votre fichier httpd.conf. Si nous ajoutons ceci � notre fichier php.ini :
disable_functions = readfile,system
toute utilisation des fonctions readfile() et system() g�n�rera l'affichage suivant :
Warning: readfile() has been disabled for security reasons in /docroot/script.php on line 2
Ces restrictions de PHP sont bien s�r invalides en ex�cution binaire.