mirror of
https://github.com/php/doc-es.git
synced 2026-04-24 23:58:06 +02:00
15593b9737
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@329367 c90b9560-bf6c-de11-be94-00142212c4b1
439 lines
15 KiB
XML
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>
|
|
|
|
¬e.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
|
|
-->
|