1
0
mirror of https://github.com/php/doc-es.git synced 2026-04-24 23:58:06 +02:00
Files
archived-doc-es/reference/runkit/sandbox.xml
T
Pedro Antonio Gil Rodríguez 15593b9737 Actualización a la última versión
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@329367 c90b9560-bf6c-de11-be94-00142212c4b1
2013-01-30 03:40:40 +00:00

439 lines
15 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 04b11e621f6ccf857368d90262f051a8d40c865d Maintainer: seros Status: ready -->
<!-- Generated by xml_proto.php v2.2. Found in /scripts directory of phpdoc. -->
<refentry xml:id="runkit.sandbox" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>Runkit_Sandbox</refname>
<refpurpose>
La Clase Runkit Sandbox -- Máquina Virtual de PHP
</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<para>
Al instanciar la clase <classname>Runkit_Sandbox</classname>
se crea un nuevo hilo con su própio ámbito
y pila de programa. Al usar un conjunto de opciones pasadas al constructor, este entorno
puede estar restringido a un subconjunto de lo que el intérprete primario puede hacer y proporciona un
entorno seguro para ejecutar código proporcionado por el usuario.
</para>
&note.runkit.sandbox;
</refsect1>
<refsect1 role="constructor">
<title>Constructor</title>
<methodsynopsis>
<type>void</type><methodname>Runkit_Sandbox::__construct</methodname>
<methodparam choice="opt"><type>array</type><parameter>options</parameter></methodparam>
</methodsynopsis>
<para>
<parameter>options</parameter> es un array asociativo que contiene
cualquier combinación de las opciones especiales ini listadas abajo.
</para>
<para>
<variablelist>
<varlistentry>
<term><parameter>safe_mode</parameter></term>
<listitem>
<para>
Si el script exterior que está instanciando la
clase <classname>Runkit_Sandbox</classname>
se configura con <literal>safe_mode = off</literal>, safe_mode
puede ser activado para el entorno del aislamiento de procesos (sandbox). Esta configuración
no se puede usar para deshabilitar <literal>safe_mode</literal> cuando ya está
habilitado en el script exterior.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>safe_mode_gid</parameter></term>
<listitem>
<para>
Si el script exterior que está instanciando la
clase <classname>Runkit_Sandbox</classname>
se configura con <literal>safe_mode_gid = on</literal>, safe_mode_gid
puede ser activado para el entorno del aislamiento de procesos. Esta configuración
no se puede usar para habilitar <literal>safe_mode_gid</literal> cuando ya está
deshabilitado en el script exterior.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>safe_mode_include_dir</parameter></term>
<listitem>
<para>
Si el script exterior que está instanciando la
clase <classname>Runkit_Sandbox</classname>
se configura con un directorio <literal>safe_mode_include_dir</literal>,
un nuevo directorio safe_mode_include_dir puede ser establecido para los entornos del aislamiento
de procesos bajo es valor definido actualmente. safe_mode_include_dir también puede ser
limpiado para indicar que la característica de bypass está deshabilitada.
Si safe_mode_include_dir estaba en blanco en el script exterior, pero safe_mode
no estaba habilitado, se puede establecer cualquier directorio safe_mode_include_dir arbitrario
mientras se activa safe_mode.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>open_basedir</parameter></term>
<listitem>
<para>
<parameter>open_basedir</parameter> puede ser establecido a cualquier ruta bajo la
confuguración actual de <literal>open_basedir</literal>. Si
<literal>open_basedir</literal> no está establecido dentro del ámbito global,
se asume que es el directorio raíz y puede ser establecido a cualquier ubicación.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>allow_url_fopen</parameter></term>
<listitem>
<para>
Como <parameter>safe_mode</parameter>, esta configuración sólo puede ser hecha más restrictiva,
en este caso estableciéndola a &false; cuando estaba anteriomente establecida a &true;
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>disable_functions</parameter></term>
<listitem>
<para>
Una lista de funciones separadas por comas a deshabilitar dentro del sub-intérprete del
aisalmiaento de procesos. Esta lista no necesita contener los nombres de las funciones
actualmente deshabiltadas, permanecerán deshabiltadas ya estén listadas o no.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>disable_classes</parameter></term>
<listitem>
<para>
Una lista de clases separadas por comas a deshabilitar dentro del sub-intérprete del
aisalmiaento de procesos. Esta lista no necesita contener los nombres de las clases
actualmente deshabiltadas, permanecerán deshabiltadas ya estén listadas o no.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>runkit.superglobal</parameter></term>
<listitem>
<para>
Una lista de varables separadas por comas a ser tratadas como superglobales dentro del
sub-intérprete del aislamiaento de procesos. Estas variables serás usadas además de cualquier
variable definida internamente o a través de la configuración global runkit.superglobal.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>runkit.internal_override</parameter></term>
<listitem>
<para>
La opción ini <literal>runkit.internal_override</literal> puede ser deshabilitada
(pero no rehabilitada) dentro de los aislamientos de procesos.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<example>
<title>Instanciar un entorno de aislamiento de procesos (sandbox) restringido</title>
<programlisting role="php">
<![CDATA[
<?php
$opciones = 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($opciones);
/* Las configuraciones ini no protegidas pueden establecerse normalmente */
$sandbox->ini_set('html_errors',true);
?>
]]>
</programlisting>
</example>
</refsect1>
<refsect1 role="variables">
<title>Acceder a Variables</title>
<para>
Todas las variables en el ámbito global del entorno del aislamiento de procesos
son accesibles como propiedades del objeto de aislamiento de procesos.
Lo primero a tener en cuenta es que a causa de la manera en que se maneja
la memoria entre estos dos hilos, las variables de objeto y de recurso
actualmente no se pueden intercambiar entre intérpretes.
Además, todas las matrices se copian en profundidad y cualquier referencia
se perderá. Esto también siginifiva que las referencias entre
intérpretes no son posibles.
</para>
<example>
<title>Trabajar con variables en un entorno de aislamiento de procesos (sandbox)</title>
<programlisting role="php">
<![CDATA[
<?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));');
?>
]]>
</programlisting>
</example>
&example.outputs;
<screen>
<![CDATA[
bar
barbaz
bool(false)
]]>
</screen>
</refsect1>
<refsect1 role="functions">
<title>Llamar a Funciones de PHP</title>
<para>
Cualquier función definida dentro del entorno de aislamiento de procesos puede ser llamada como
un método del objeto de aislamiento de procesos. Esto también incluye algunos
contructores de lenguaje de pseudo-función: <function>eval</function>,
<function>include</function>, <function>include_once</function>,
<function>require</function>, <function>require_once</function>,
<function>echo</function>, <function>print</function>,
<function>die</function>, y <function>exit</function>.
</para>
<example>
<title>Llamar a funciones del aislamiento de procesos</title>
<programlisting role="php">
<![CDATA[
<?php
$sandbox = new Runkit_Sandbox();
echo $sandbox->str_replace('a','f','abc');
?>
]]>
</programlisting>
</example>
&example.outputs;
<screen>
<![CDATA[
fbc
]]>
</screen>
<para>
Cuando se pasan argumentos a una función de aislameinto de procesos, los argumentos
se toman desde la instancia exterior de PHP. Si se desea pasar
argumentos desde el ámbito del aislamiento de procesos, asegúrese de acceder a ellos como
propiedades del objeto de aislamiento de procesos como se ilustra abajo.
</para>
<example>
<title>Pasar agumentos a las funciones del aislamiento de procesos</title>
<programlisting role="php">
<![CDATA[
<?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');
?>
]]>
</programlisting>
</example>
&example.outputs;
<screen>
<![CDATA[
bar
baz
]]>
</screen>
</refsect1>
<refsect1 role="settings">
<title>Cambiar la Configuración del Aislamiento de Procesos</title>
<para>
A partir de la versión 0.5 de runkit, se pueden modificar ciertas configuraciones
del aislamiento de procesos sobre la marcha usando la sintaxis de ArrayAccess.
Algunos ajustes, como <parameter>active</parameter>,
son de sólo lectura y proporcionan información de estado.
Otros ajustes, como <parameter>output_handler</parameter>,
se pueden establecer y leer como un índice de matriz normal.
Ajustes futuros puede ser de sólo escritura, sin embargo
actualmente no existen tales ajustes.
</para>
<para>
<table>
<title>Configuración del Aislamiento de Procesos / Indicadores de estado</title>
<tgroup cols="4">
<thead>
<row>
<entry>Configuración</entry>
<entry>Tipo</entry>
<entry>Propósito</entry>
<entry>Predeterminado</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>active</literal></entry>
<entry><type>Boolean</type> (Sólo Lectura)</entry>
<entry>
&true; si el Aislamiento de Procesos está aún en un estado usable,
&false; si la peticióni está abandonada debido a una
llamada a die(), exit(), o a causa de una condición
de error fatal.
</entry>
<entry>&true; (Inicial)</entry>
</row>
<row>
<entry><literal>output_handler</literal></entry>
<entry><type>Callback</type></entry>
<entry>
Cuando se establece a una llamada de retorno válida, toda la salida generada
por la instancia del Aislamiento de Procesos será procesada por
la función nominada.
Los gestores de salida del Aislamiento de Procesos siguen las misma convenciones
de llamada que los gestores de salida del lado del sistema.
</entry>
<entry>Ninguno</entry>
</row>
<row>
<entry><literal>parent_access</literal></entry>
<entry><type>Boolean</type></entry>
<entry>
¿El aislamiento de procesos puede usar instancias de la
clase <classname>Runkit_Sandbox_Parent</classname>?
Debe estar habilitado para otras configuraciones de
<classname>Runkit_Sandbox_Parent</classname>
relacionadas para que funcione.
</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>parent_read</literal></entry>
<entry><type>Boolean</type></entry>
<entry>
¿El aislamiento de procesos puede leer variables en su contexto padre?
</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>parent_write</literal></entry>
<entry><type>Boolean</type></entry>
<entry>
¿El aislamiento de procesos puede modificar variables en su contexto padre?
</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>parent_eval</literal></entry>
<entry><type>Boolean</type></entry>
<entry>
¿El aislamiento de procesos puede evaluar código arbitrario en su
contexto padre? <emphasis>PELIGROSO</emphasis>
</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>parent_include</literal></entry>
<entry><type>Boolean</type></entry>
<entry>
¿El aislamiento de procesos puede incluir archivos de código php en su
contexto padre? <emphasis>PELIGROSO</emphasis>
</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>parent_echo</literal></entry>
<entry><type>Boolean</type></entry>
<entry>
¿El aislamiento de procesos puede hacer eco de información en su contexto padre
eefctivamente pasando su propio output_handler?
</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>parent_call</literal></entry>
<entry><type>Boolean</type></entry>
<entry>
¿El aislamiento de procesos puede llamar a funciones en su
contexto padre?
</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>parent_die</literal></entry>
<entry><type>Boolean</type></entry>
<entry>
¿El aislamiento de procesos puede eliminar su propio contexto padre? (Y así a sí mismo)
</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>parent_scope</literal></entry>
<entry><type>Integer</type></entry>
<entry>
¿Qué Ámbito tendrá el acceso de las propiedades padre?
0 == Ámbito global, 1 == Ámbito de llamda,
2 == Ámbito precediendo al ambito de llamada,
3 == El ambito antes de este, etc..., etc...
</entry>
<entry><literal>0</literal> (Global)</entry>
</row>
<row>
<entry><literal>parent_scope</literal></entry>
<entry><type>String</type></entry>
<entry>
Cuando <literal>parent_scope</literal> está establecido a
un valor de cadena, se refiere a un variable de matriz nominada
en el Ámbito global. Si la variable nominada no
existe el momento del acceso se creará como un
array vacío. Si la varible existe pero no es un array,
se creará un array "falso" que contiene una referencia
a la variable global nominada.
</entry>
<entry></entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->