(PECL runkit >= 0.7.0)
Runkit_Sandbox_Parent — Класс анти-песочницы для Runkit
Экземпляр Runkit_Sandbox_Parent, созданный внутри окружения Runkit_Sandbox предоставляет набор контролируемых средств для доступа к внешнему окружению из песочницы.
Замечание: Поддержка песочницы (необходима для runkit_lint(), runkit_lint_file(), и класса Runkit_Sandbox) доступна только начиная с версии PHP 5.1.0 или в специально пропатченных версиях PHP 5.0, а также требует потокобезопасной (thread safe) версии PHP. Для более подробной информации смотрите файл README, поставляемый с пакетом runkit.
Для использования Runkit_Sandbox_Parent необходимо
включить опцию parent_access
у используемого экземпляра
песочницы.
Пример #1 Задействует возможность использовать Runkit_Sandbox_Parent в песочнице
<?php
$sandbox = new Runkit_Sandbox();
$sandbox['parent_access'] = true;
?>
Доступ к переменным родительского окружения может быть получен
через свойства экземпляра Runkit_Sandbox_Parent
по аналогии с Runkit_Sandbox.
Доступ на чтение включается с помощью опции parent_read
песочницы, на запись с помощью parent_write
.
Данные опции указываются в дополнении к parent_access
.
В отличие от доступа к переменным Runkit_Sandbox, область
видимости не ограничена глобальными переменными. Задать необходимую
область видимость из песочницы можно параметром
parent_scope
. Значение 0 (по умолчанию) означает
доступ к глобальной области видимости. 1 указывает на область
вызова песочницы. Последующие значения ведут на следующие уровни
области видимости.
Пример #2 Доступ к переменным родительского окружения
<?php
$php = new Runkit_Sandbox();
$php['parent_access'] = true;
$php['parent_read'] = true;
$test = "Global";
$php->eval('$PARENT = new Runkit_Sandbox_Parent;');
$php['parent_scope'] = 0;
one();
$php['parent_scope'] = 1;
one();
$php['parent_scope'] = 2;
one();
$php['parent_scope'] = 3;
one();
$php['parent_scope'] = 4;
one();
$php['parent_scope'] = 5;
one();
function one() {
$test = "one()";
two();
}
function two() {
$test = "two()";
three();
}
function three() {
$test = "three()";
$GLOBALS['php']->eval('var_dump($PARENT->test);');
}
?>
Результат выполнения данного примера:
string(6) "Global" string(7) "three()" string(5) "two()" string(5) "one()" string(6) "Global" string(6) "Global"
По аналогии с доступом к песочнице, из песочницы можно
получить доступ к функциям в родительском окружении.
Включение parent_call
позволит из
песочницы получить доступ к родительским функциям.
Следующими функции и языковыми конструкциями можно
управлять с помощью отдельных настроек:
print и echo
задействуются с помощью parent_echo
;
die() и exit()
включаются через parent_die
;
eval() разрешается через parent_eval
.
Функции include, include_once,
require, и require_once можно
подключить, используя параметр parent_include
.