8.114 Fonctions runkit
8 Référence des fonctions
Manuel PHP
. Introduction . Pré-requis . Configuration à l'exécution . Constantes pré-définies ->Runkit_Sandbox . Runkit_Sandbox_Parent . runkit_class_adopt . runkit_class_emancipate . runkit_constant_add . runkit_constant_redefine . runkit_constant_remove . runkit_function_add . runkit_function_copy . runkit_function_redefine . runkit_function_remove . runkit_function_rename . runkit_import . runkit_lint_file . runkit_lint . runkit_method_add . runkit_method_copy . runkit_method_redefine . runkit_method_remove . runkit_method_rename . runkit_return_value_used . runkit_sandbox_output_handler . runkit_superglobals
|
8.114.5 Runkit_Sandbox()
Classe Runkit Sandbox -- Machine Virtuelle PHP
[ Exemples avec ndbox ] CVS uniquement
L'instanciation de la classe
Runkit_Sandbox
crée un
nouveau thread avec sa propre portée et sa pile de programme. En utilisant
les options passées au constructeur, cet environnement peut être restreint
à un sous-ensemble pour lequel l'interpréteur primaire peut exécuter et
fournir un environnement plus sûr pour l'exécution de code utilisateur.
| Note | |
Support Sandbox (requis pour
runkit_lint
,
runkit_lint_file
et la classe Runkit_Sandbox) n'est seulement disponible qu'avec PHP 5.1
ou les versions de PHP 5.0 spécialement patché et nécessite que la protection
de thread soit activée. Voyez le fichier README inclue dans le paquetage
runkit pour plus d'informations.
|
void
Runkit_Sandbox::__construct (
array
options
)
options
est un tableau associatif contenant n'importe
quelle combinaison des options ini listées ci-dessous.
-
safe_mode
-
Si un script extérieur qui est instancié avec la classe
Runkit_Sandbox
est configuré avec
safe_mode = off
, alors safe_mod
devrait être activé pour l'environnement sandbox. Cette configuration
ne peut être utilisée pour désactiver
safe_mode
lorsque safe_mode est déjà activé dans le script extérieur.
-
safe_mode_gid
-
Si le script extérieur qui est instancié avec la classe
Runkit_Sandbox
est configuré avec
safe_mode_gid = on
, alors safe_mod_gid devrait être
désactivé pour l'environnement sandbox. Cette configuration ne peut
être utilisée pour activer
safe_mode_gid
lorsque
c'est déjà désactivé dans le script extérieur.
-
safe_mode_include_dir
-
Si le script extérieur qui est instancié avec la classe
Runkit_Sandbox
est configuré avec
safe_mode_include_dir
, alors un nouveau
safe_mode_include_dir devrait être fixé pour les environnements de
sandbox sous la valeur présentement définie. safe_mode_include_dir peut
aussi être supprimé pour indiquer que l'évitement de cette
fonctionnalité est désactivé. Si safe_mode_include_dir était vide dans
le script extérieur, mais safe_mod n'était pas activé, alors n'importe
quel safe_mode_include_dir arbitraire peut être fixé en activant le
safe_mode.
-
open_basedir
-
open_basedir
peut être fixé à n'importe quel
chemin sous la configuration courante de
open_basedir
. Si open_basedir n'est pas fixé dans
la portée globale, alors il est assumé qu'il est dans le répertoire
root et peut être fixé à n'importe quelle autre emplacement.
-
allow_url_fopen
-
Comme
safe_mode
, cette configuration peut
seulement être faite plus restrictive, dans ce cas, en mettant
FALSE
lorsque la valeur était précédemment
TRUE
.
-
disable_functions
-
Liste de fonctions séparées par des virgules à désactiver dans le
sous-interpréteur sandbox.
Cette liste ne nécessite pas de contenir le nom des fonctions déjà
désactivées, elles resteront désactivées même si elles ne sont pas listées.
-
disable_classes
-
Liste de classes séparées par des virgules à désactiver dans le
sous-interpréteur sandbox.
Cette liste ne nécessite pas de contenir le nom des classes déjà
désactivées, elles resteront désactivées même si elles ne sont pas listées.
-
runkit.superglobal
-
Liste des variables qui seront traitées en tant que superglobales dans
le sous-interpréteur sandbox.
Ces variables seront utilisées en plus de celles définies à l'interne
ou à l'aide de la configuration runkit.superglobal.
-
runkit.internal_override
-
L'option ini
runkit.internal_override
devrait être
désactivée (mais non réactivée) à l'intérieur des sandbox.
| Instanciation d'un sandbox restreint |
<?php $options = array( 'safe_mode'=>true, 'open_basedir'=>'/var/www/users/jdoe/', 'allow_url_fopen'=>'false', 'disable_functions'=>'exec,shell_exec,passthru,system', 'disable_classes'=>'myAppClass'); $sandbox = new Runkit_Sandbox($options); /* Configurations ini non protégées sont fixées normalement */ $sandbox->ini_set('html_errors',true); ?>
|
Toutes les variables dans la portée globale de l'environnement sandbox sont
accessibles comme étant des propriétés de l'objet sandbox. La première
chose à noter, c'est puisque la manière de gestion de la mémoire entre les
deux threads est faite que les objets et les variables de ressources ne peuvent
pas, jusqu'à présent, être échangées entre les interpréteurs. De plus, tous
les tableaux sont copiés au complet et toutes références seront perdues.
Cela veut aussi dire que les références entre les interpréteurs ne sont pas
possibles.
| Utilisation des variables dans sandbox |
<?php $sandbox = new Runkit_Sandbox();
$sandbox->foo = 'bar'; $sandbox->eval('echo "$foo\n"; $bar = $foo . "baz";'); echo "{$sandbox->bar}\n"; if (isset($sandbox->foo)) unset($sandbox->foo); $sandbox->eval('var_dump(isset($foo));'); ?>
|
L'exemple ci-dessus va afficher :
bar
barbaz
bool(false)
Toute fonction définie dans le sandbox peut être appelée en tant que
méthode sur l'objet sandbox. Ceci inclue aussi quelques constructions de
pseudo-fonctions :
eval
include
,
include_once
,
require
,
require_once
,
echo
,
print
,
die
et
exit
.
| Appel de fonctions sandbox |
<?php $sandbox = new Runkit_Sandbox();
echo $sandbox->str_replace('a','f','abc'); ?>
|
L'exemple ci-dessus va afficher :
fbc
Lors du passage d'arguments à une fonction sandbox, les arguments sont pris
à partir de l'extérieur de l'instance de PHP. Si vous voulez passer les
arguments à la portée de sandbox, soyez assuré de les accéder comme étant
des propriétés de l'objet sandbox comme montré plus haut.
| Passage d'arguments aux fonctions sandbox |
<?php $sandbox = new Runkit_Sandbox();
$foo = 'bar'; $sandbox->foo = 'baz'; echo $sandbox->str_replace('a',$foo,'a'); echo $sandbox->str_replace('a',$sandbox->foo,'a'); ?>
|
L'exemple ci-dessus va afficher :
bar
baz
Depuis la version de runkit 0.5, certaines configurations de Sandbox
peuvent être modifiées à la volée en utilisant la syntaxe ArrayAccess.
Certaines configurations, comme
active
sont en
lecture seule et permettent de fournir des informations de statut. Les
autres configurations, comme
output_handler
peuvent
être fixées et lues comme un tableau normal. Les configurations futures
devraient être en écriture seule, cependant aucune configuration n'existe
présentement.
| Configuration |
Type |
But |
Défaut |
|
active
|
booléen (Lecture Seule) |
TRUE
si le Sandbox est toujours dans un état utilisable,
FALSE
si
la requête est en arrêt dû à un appel à die(), exit() ou à cause d'une
condition d'erreur fatale.
|
TRUE
(Initial) |
|
output_handler
|
Callback
|
Lorsque fixée à une valeur de retour valide, toutes sorties générées
par l'instance Sandbox seront traitées à travers la fonction nommée.
Les sorties de Sandbox suivent les mêmes conventions d'appel pour les
gestionnaires de sortie du système entier.
|
Aucun |
|
parent_access
|
booléen |
Autorise sandbox à utiliser des instances de la classe
Runkit_Sandbox_Parent
.
Doit être activée pour que les autres configurations reliées à
Runkit_Sandbox_Parent
fonctionnent.
|
FALSE
|
|
parent_read
|
booléen |
Autorise sandbox à lire des variables dans son contexte parent.
|
FALSE
|
|
parent_write
|
booléen |
Autorise sandbox à modifier des variables dans son contexte parent.
|
FALSE
|
|
parent_eval
|
booléen |
Autorise sandbox à évaluer du code arbitraire dans son contexte
parent. (
DANGEREUX
)
|
FALSE
|
|
parent_include
|
booléen |
Autorise sandbox à inclure des fichiers de code php dans son contexte
parent.
DANGEREUX
|
FALSE
|
|
parent_echo
|
booléen |
Autorise sandbox à afficher des données dans son contexte parent en
court-circuitant efficacement son propre output_handler.
|
FALSE
|
|
parent_call
|
booléen |
Autorise sandbox à appeler des fonctions dans son contexte parent.
|
FALSE
|
|
parent_die
|
booléen |
Autorise sandbox à tuer son propre parent. (Et donc soi-même)
|
FALSE
|
|
parent_scope
|
entier |
Quelle portée la propriété de l'accès parental vérifiera ?
0 == Portée Globale, 1 == Portée Appelante,
2 == Portée précédant la portée appelante,
3 == La porté avant celle-ci, etc., etc.
|
0
(Global) |
|
parent_scope
|
chaîne de caractères |
Lorsque
parent_scope
est fixée à une valeur d'une
chaîne de caractères, elle se réfère à une variable tableau nommée
dans la portée globale. Si la variable nommée n'existe pas au moment
de son accès, elle sera créée comme un tableau vide. Si la variable
existe mais n'est pas un tableau, un faux tableau sera créé contenant
une référence à la variable globale nommée.
|
|
|