Chapitre 22. Safe mode

Table des matières
Functions 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 acteurs , notamment les fournisseurs d' hébergement , utilise le "Safe Mode " .

Les directives de configuration qui contrôlent le safe mode sont :

 
safe_mode

 
=

 
Off

 
open_basedir

 
=

 
safe_mode_exec_dir

 
=

 
safe_mode_allowed_env_vars

 
=

 
PHP_

 
safe_mode_protected_env_vars

 
=

 
LD_LIBRARY_PATH

 
disable_functions

 
=





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 qui seront manipulés par ce script . Par exemple , dans a la situation suivante :




éxécuter le script script.php



générera cette erreur, si le safe mode est activé :













Si vou utilisez la directive open_basedir au lieu du safe_mode , alors les manipulations seront limitées aux fichiers situés dans les dossiers spécifiés . Par exemple :




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 :





Functions désactivées par le Safe Mode

Voici une liste non-exhaustive des fonctions désactivées par le Safe Mode .

Tableau 22-1 . Fonctions désactivées par le Safe Mode

Fonction Limitations
dbmopen( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

dbase_open( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

filepro( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

filepro_rowcount( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

filepro_retrieve( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

Fonctions ifx_ restrictions sql_safe_mode , ( != Safe Mode )
Fonctions ingres_ restrictions sql_safe_mode , ( != Safe Mode )
Fonctions mysql_ restrictions sql_safe_mode , ( != Safe Mode )
pg_loimport( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

posix_mkfifo( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

putenv( ) Obéis aux directives safe_mode_protected_env_vars et safe_mode_allowed_env_vars . Voir aussi la documentation de putenv( )
move_uploaded_file( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

chdir( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

dl( ) Cette fonction est désactivée par le safe-mode
backtick operator Cette fonction est désactivée par le safe-mode
shell_exec( ) (équivalent fonctionnels des guillemets oblique ) Cette fonction est désactivée par le safe-mode
exec( ) Vous ne pouvez éxécuter que les programmes qui sont dans le dossier safe_mode_exec_dir . Pour des raisons pratiques , il n' est pas possible d 'utiliser des jokers comme . . dans le chemin de ce dossier .
system( ) Vous ne pouvez éxécuter que les programmes qui sont dans le dossier safe_mode_exec_dir . Pour des raisons pratiques , il n' est pas possible d 'utiliser des jokers comme . . dans le chemin de ce dossier .
passthru( ) Vous ne pouvez éxécuter que les programmes qui sont dans le dossier safe_mode_exec_dir . Pour des raisons pratiques , il n' est pas possible d 'utiliser des jokers comme . . dans le chemin de ce dossier .
popen( ) Vous ne pouvez éxécuter que les programmes qui sont dans le dossier safe_mode_exec_dir . Pour des raisons pratiques , il n' est pas possible d 'utiliser des jokers comme . . dans le chemin de ce dossier .
mkdir( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

rmdir( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

rename( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

unlink( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

copy( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

(on source and target )
chgrp( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

chown( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

chmod( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

De plus, vous ne pouvez pas modifier les SUID, SGID et sticky bit
touch( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

symlink( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

(note: only the target is checked)
link( )

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

Vérifie que le fichier / dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. .

(note: seule le fichier de destination est vérifié.
getallheaders( ) En Safe Mode , les entêtes commencants par ' authorization ' (sensible à la casse ) ne seront pas retournés . Attention : cette protection est mise en défaut par la fonction getallheaders( ) sur les serveurs AOL !
Toutes les fonctions qui utilisent les wrappers de fichiers . ? ?