Sécurité et "Safe Mode"
Nom | Défaut | Modifiable | Historique |
---|---|---|---|
safe_mode | "0" | PHP_INI_SYSTEM | Supprimé en PHP 5.4.0. |
safe_mode_gid | "0" | PHP_INI_SYSTEM | Supprimé en PHP 5.4.0. |
safe_mode_include_dir | NULL | PHP_INI_SYSTEM | Supprimé en PHP 5.4.0. |
safe_mode_exec_dir | "" | PHP_INI_SYSTEM | Supprimé en PHP 5.4.0. |
safe_mode_allowed_env_vars | "PHP_" | PHP_INI_SYSTEM | Supprimé en PHP 5.4.0. |
safe_mode_protected_env_vars | "LD_LIBRARY_PATH" | PHP_INI_SYSTEM | Supprimé en PHP 5.4.0. |
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.
AvertissementCette fonctionnalité est devenue OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 5.4.0.
-
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 vautTRUE
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.
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. -
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.
Voir aussi open_basedir, disable_functions, disable_classes, 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
<?php
readfile('/etc/passwd');
?>
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>
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
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.
Version en cache
22/12/2024 01:31:16 Cette version de la page est en cache (à la date du 22/12/2024 01:31:16) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-ini.sect.safe-mode.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.