|
Table des matières
Chapitre 42. Safe modeTable des matières Fonctions désactivées par le Safe Mode Le “Safe Mode” est le mode de sécurité de PHP : une solution au problème de partage de PHP sur un serveur. Ce système pêche au niveau de l’architecture car il n’est pas correct de tenter de résoudre ce problème au niveau de PHP, mais les solutions alternatives basées sur le serveur web et l’OS ne sont pas réalistes. De nombreux intervenants, notamment les fournisseurs d’hébergement, utilisent le “Safe Mode”.
Sécurité et "Safe Mode"Tableau 42-1. Options de configuration
Pour plus de détails sur les constantes PHP_INI_*, reportez-vous à Annexe G. Voici un éclaircissement sur l’utilisation des directives de configuration. “safe_mode” booléen Active ou non le mode de sécurité de PHP. “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, sinon, sur les “GID”. “safe_mode_include_dir” chaîne de caractères 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”).
“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. 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(). 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. “disable_functions” chaîne de caractères 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 doit être configurée dans le fichier “php.ini”. Par exemple, vous ne pourrez pas la configurer dans le fichier “httpd.conf”.
exécuter le script “script.php” readfile(’/etc/passwd’); ?> " | générera cette erreur, si le Safe Mode est activé :
Si vous exécutez le script “script.php” ci-dessus avec la configuration d’open_basedir, le résultat sera l’affichage suivant :
Vous pouvez aussi désactiver individuellement les fonctions. Par exemple, en ajoutant cette ligne dans le fichier “php.ini” :
toute utilisation des fonctions readfile() et system() générera l’affichage suivant :
Travail collaboratifContribuez, en ajjoutant des elements a cette page de manuel : Merci de votre aide |