1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-23 23:12:09 +01:00

update revision EN yaf and security (#165)

* update revision EN yaf and security

* Review

* fix review

* Reviewed

---------

Co-authored-by: Marcos Porto Mariño <php@marcospor.to>
This commit is contained in:
Philippe DELENTE
2025-03-16 15:33:48 +01:00
committed by GitHub
parent c21a59f24b
commit e571c79b21
38 changed files with 455 additions and 333 deletions

View File

@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 8c094a0d91e2154833af5bd85c984fe6e80cdbbc Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 4d17b7b4947e7819ff5036715dd706be87ae4def Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<reference xml:id="class.yaf-action-abstract" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>La clase Yaf_Action_Abstract</title>
<titleabbrev>Yaf_Action_Abstract</titleabbrev>
<partintro>
<!-- {{{ Yaf_Action_Abstract intro -->
<section xml:id="yaf-action-abstract.intro">
&reftitle.intro;
@@ -19,28 +19,27 @@
también puede ser una clase <classname>Yaf_Action_Abstract</classname>.
</para>
<para>
Ya que debería existir un punto de entrada el cual pueda ser llamado por Yaf (a partir de PHP 5.3,
existe un nuevo método mágico, __invoke, pero Yaf no sólo funciona con PHP 5.3+,
Yaf elige otro método mágico de ejecución), se debe implementar el método abstracto
Dado que debe haber un punto de entrada que pueda ser llamado por Yaf,
debe implementar el método abstracto
<methodname>Yaf_Action_Abstract::execute</methodname> en la clase de
acción personalizada.
</para>
</section>
<!-- }}} -->
<section xml:id="yaf-action-abstract.synopsis">
&reftitle.classsynopsis;
<!-- {{{ Synopsis -->
<classsynopsis>
<ooclass><classname>Yaf_Action_Abstract</classname></ooclass>
<!-- {{{ Class synopsis -->
<classsynopsisinfo>
<ooclass>
<classname>Yaf_Action_Abstract</classname>
</ooclass>
<ooclass>
<modifier>extends</modifier>
<classname>Yaf_Controller_Abstract</classname>
@@ -52,20 +51,20 @@
<modifier>protected</modifier>
<varname linkend="yaf-action-abstract.props.controller">_controller</varname>
</fieldsynopsis>
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.yaf-action-abstract')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])" />
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.yaf-controller-abstract')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])" />
</classsynopsis>
<!-- }}} -->
</section>
<!-- {{{ Yaf_Action_Abstract properties -->
<section xml:id="yaf-action-abstract.props">
&reftitle.properties;
@@ -115,12 +114,12 @@
</variablelist>
</section>
<!-- }}} -->
</partintro>
&reference.yaf.entities.yaf-action-abstract;
</reference>
<!-- Keep this comment at the end of the file

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ecaa2146429a7f88de40dfce14718afc896b74c5 Maintainer: seros Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<!-- EN-Revision: 7541512acf899391b68c3b6bae66a4fcc65e6c4e Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<reference xml:id="class.yaf-loader" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
@@ -80,6 +80,7 @@ class Bootstrap extends Yaf_Bootstrap_Abstract{
public function _initLoader($dispatcher) {
Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
}
}
?>
]]>
</programlisting>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 73fae4ee51b644b72028e610abefefced57c18ad Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 4a211b7c8fb2b4410851d06c6f90f751d1f670d0 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-application.bootstrap" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -46,7 +46,7 @@
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Un ejemplo de <function>A Bootstrap</function></title>
<title>Un ejemplo de Bootstrap</title>
<programlisting role="php">
<![CDATA[
<?php

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 8bf3b3f0732d2b5c635f950e04e27a44b36f0cb0 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 7541512acf899391b68c3b6bae66a4fcc65e6c4e Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-application.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -106,7 +106,7 @@ ap.modules=Index
<![CDATA[
<?php
defined('APPLICATION_PATH') // APPLICATION_PATH será usada en el archivo de configuración ini
|| define('APPLICATION_PATH', __DIR__));
|| define('APPLICATION_PATH', __DIR__);
$application = new Yaf_Application(APPLICATION_PATH.'/conf/application.ini');
$application->bootstrap()->run();

View File

@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 8b6d169424ff189bb563ef4c3f35f8adff3f42c5 Maintainer: seros Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<!-- EN-Revision: 2ba031cea18ed772310819005eeb1557c6a8ec75 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-config-ini.isset" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>Yaf_Config_Ini::__isset</refname>
<refpurpose>Determinar si existe una clave</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
@@ -16,13 +16,13 @@
<methodparam><type>string</type><parameter>name</parameter></methodparam>
</methodsynopsis>
<para>
</para>
&warn.undocumented.func;
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
@@ -30,21 +30,21 @@
<term><parameter>name</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file

View File

@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 30f488ae241fa5c58a735d0e4c1b913dbc4bc73e Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 4a211b7c8fb2b4410851d06c6f90f751d1f670d0 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-dispatcher.setview" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>Yaf_Dispatcher::setView</refname>
<refpurpose>Establecer un motor de vistas personalizado</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
@@ -16,12 +16,12 @@
<methodparam><type>Yaf_View_Interface</type><parameter>view</parameter></methodparam>
</methodsynopsis>
<para>
Este método proporciona una solución para aquellos que quieran utilizar un motor de vistas
personalizado en lugar de la clase <classname>Yaf_View_Simple</classname>
Este método ofrece una solución si desea utilizar una vista personalizada
personalizado en lugar de <classname>Yaf_View_Simple</classname>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
@@ -29,24 +29,24 @@
<term><parameter>view</parameter></term>
<listitem>
<para>
Una instancia de la clase Yaf_View_Interface
Una instancia de <classname>Yaf_View_Interface</classname>
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Ejemplo de <function>un motor de Vistas personalizado</function></title>
<title>Ejemplo de un motor de Vistas personalizado</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -59,7 +59,7 @@ class Smarty_Adapter implements Yaf_View_Interface
* @var Smarty
*/
public $_smarty;
/**
* Constructor
*
@@ -69,16 +69,16 @@ class Smarty_Adapter implements Yaf_View_Interface
*/
public function __construct($tmplPath = null, $extraParams = array()) {
$this->_smarty = new Smarty;
if (null !== $tmplPath) {
$this->setScriptPath($tmplPath);
}
foreach ($extraParams as $clave => $valor) {
$this->_smarty->$clave = $valor;
}
}
/**
* Establecer la ruta a las plantillas
*
@@ -91,10 +91,10 @@ class Smarty_Adapter implements Yaf_View_Interface
$this->_smarty->template_dir = $ruta;
return;
}
throw new Exception('La ruta proporcionada no es válida');
}
/**
* Asignar una variable a la plantilla
*
@@ -106,7 +106,7 @@ class Smarty_Adapter implements Yaf_View_Interface
{
$this->_smarty->assign($clave, $valor);
}
/**
* Permite que funcionen las pruebas con empty() y isset()
*
@@ -117,7 +117,7 @@ class Smarty_Adapter implements Yaf_View_Interface
{
return (null !== $this->_smarty->get_template_vars($clave));
}
/**
* Permite que funcione unset() con las porpiedades de los objetos
*
@@ -128,7 +128,7 @@ class Smarty_Adapter implements Yaf_View_Interface
{
$this->_smarty->clear_assign($clave);
}
/**
* Asignar variables a la plantilla
*
@@ -147,10 +147,10 @@ class Smarty_Adapter implements Yaf_View_Interface
$this->_smarty->assign($spec);
return;
}
$this->_smarty->assign($spec, $valor);
}
/**
* Limpiar todas las variables asignadas
*
@@ -163,7 +163,7 @@ class Smarty_Adapter implements Yaf_View_Interface
public function clearVars() {
$this->_smarty->clear_all_assign();
}
/**
* Procesa una plantilla y devuelve la salida.
*
@@ -221,7 +221,7 @@ class Bootstrap extends Yaf_Bootstrap_Abstract {
</programlisting>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
@@ -229,7 +229,7 @@ class Bootstrap extends Yaf_Bootstrap_Abstract {
<member><classname>Yaf_View_Simple</classname></member>
</simplelist>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 7418592d82d6cde8d052effd3607e5761d6c4e67 Maintainer: andresdzphp Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: cd2604567488ad612ac52d30ff7596beee1beba4 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-loader.getnamespacepath" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 8b6d169424ff189bb563ef4c3f35f8adff3f42c5 Maintainer: andresdzphp Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: cd2604567488ad612ac52d30ff7596beee1beba4 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-loader.getnamespaces" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 7418592d82d6cde8d052effd3607e5761d6c4e67 Maintainer: andresdzphp Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 16a1bdfd1c36108534b5af08dc4b751c7ac0fdaf Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-loader.registernamespace" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -18,7 +18,7 @@
</methodsynopsis>
<para>
Registra un espacio de nombres con una ruta de búsqueda, <classname>Yaf_Loader</classname>
busca clases bajo este espacio de nombres en la ruta, el uno es también podría ser
busca clases bajo este espacio de nombres en la ruta, el uno es también podría ser
configurado vía <link linkend="configuration.yaf.library.namespace">
application.library.directory.namespace</link>(in application.ini);
</para>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 007c6c097fcd8a3cf692e39089a21fa24ac08736 Maintainer: andresdzphp Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 5442ab5aab2c2eb0226b56308626ef35fa37ed51 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-request-abstract.clearparams" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 8b6d169424ff189bb563ef4c3f35f8adff3f42c5 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 85ff795121d5ce5380ff65efff532adfe705f5e8 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-request-abstract.setcontrollername" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>Yaf_Request_Abstract::setControllerName</refname>
<refpurpose>El propósito de setControllerName</refpurpose>
<refpurpose>Establecer el nombre del controlador</refpurpose>
</refnamediv>
<refsect1 role="description">
@@ -14,9 +14,10 @@
<methodsynopsis>
<modifier>public</modifier> <type>void</type><methodname>Yaf_Request_Abstract::setControllerName</methodname>
<methodparam><type>string</type><parameter>controller</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>format_name</parameter><initializer>true</initializer></methodparam>
</methodsynopsis>
<para>
Establecer el nombre del controlador a solicitar, esto es generalmente utilizado por el enrutador personalizado para establecer el nombre del controlador de resultado de ruta.
</para>
&warn.undocumented.func;
@@ -30,7 +31,16 @@
<term><parameter>controller</parameter></term>
<listitem>
<para>
&string;, nombre del controlador, debe ser en estilo camel, como "Index" o "Foo_Bar".
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>format_name</parameter></term>
<listitem>
<para>
esto se introduce en Yaf 3.2.0, por defecto Yaf formateará el nombre en modo camel,
si esto se establece a &false;, Yaf establecerá el nombre original a petición.
</para>
</listitem>
</varlistentry>

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 8b6d169424ff189bb563ef4c3f35f8adff3f42c5 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 85ff795121d5ce5380ff65efff532adfe705f5e8 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-request-abstract.setmodulename" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>Yaf_Request_Abstract::setModuleName</refname>
<refpurpose>El propósito de setModuleName</refpurpose>
<refpurpose>Establecer el nombre del módulo</refpurpose>
</refnamediv>
<refsect1 role="description">
@@ -14,9 +14,10 @@
<methodsynopsis>
<modifier>public</modifier> <type>void</type><methodname>Yaf_Request_Abstract::setModuleName</methodname>
<methodparam><type>string</type><parameter>module</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>format_name</parameter><initializer>true</initializer></methodparam>
</methodsynopsis>
<para>
Establecer el nombre del módulo a la petición, esto se utiliza generalmente por un enrutador personalizado para establecer el nombre del módulo del resultado de la ruta.
</para>
&warn.undocumented.func;
@@ -30,7 +31,16 @@
<term><parameter>module</parameter></term>
<listitem>
<para>
&string; nombre del módulo, debe estar en estilo camel, como "Index" o "Foo_Bar"
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>format_name</parameter></term>
<listitem>
<para>
Esto se introdujo en Yaf 3.2.0, por omisión Yaf formateará el nombre en modo camel,
si esto se establece como &false;, Yaf establecerá el nombre original a la petición.
</para>
</listitem>
</varlistentry>

View File

@@ -1,23 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 8b6d169424ff189bb563ef4c3f35f8adff3f42c5 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: b91741b2890ffede77890516280158f11c0c44cd Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-request-abstract.setparam" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>Yaf_Request_Abstract::setParam</refname>
<refpurpose>El propósito de setParam</refpurpose>
<refpurpose>Establecer un argumento de llamada a una petición</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>void</type><methodname>Yaf_Request_Abstract::setParam</methodname>
<modifier>public</modifier> <type>bool</type><methodname>Yaf_Request_Abstract::setParam</methodname>
<methodparam><type>string</type><parameter>name</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>value</parameter></methodparam>
</methodsynopsis>
<para>
Establecer un argumento a la petición, que puede ser recuperado por <methodname>Yaf_Request_Abstract::getParam</methodname>
</para>
&warn.undocumented.func;
@@ -31,7 +31,7 @@
<term><parameter>name</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
@@ -39,7 +39,7 @@
<term><parameter>value</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
@@ -53,6 +53,13 @@
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><methodname>Yaf_Request_Abstract::getParam</methodname></member>
<member><methodname>Yaf_Request_Abstract::getParams</methodname></member>
</simplelist>
</refsect1>
</refentry>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: seros Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<!-- EN-Revision: 0d4f735ed7f59c0ac5a5b3bbe90fa72dc84d8cee Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-response-abstract.appendbody" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -64,7 +64,7 @@
<?php
$respuesta = new Yaf_Response_Http();
$respuesta->setBody("Hola")->prependBody(" Mundo");
$respuesta->setBody("Hola")->appendBody(" Mundo");
echo $respuesta;
?>

View File

@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 056281820311a8059f561e83537c252fd7e7f07b Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-route-map.assemble" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>Yaf_Route_Map::assemble</refname>
<refpurpose>Ensamblar un URL</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
@@ -20,7 +20,7 @@
Ensamblar un URL.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
@@ -28,7 +28,7 @@
<term><parameter>info</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
@@ -36,13 +36,27 @@
<term><parameter>query</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Devuelve &string; en caso de éxito o &null; en caso de fallo.
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Puede lanzar <classname>Yaf_Exception_TypeError</classname>.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
@@ -92,14 +106,7 @@ string(%d) "/foo/bar/_/tkey1/tval1/tkey2/tval2"
</screen>
</example>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ecaa2146429a7f88de40dfce14718afc896b74c5 Maintainer: seros Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<!-- EN-Revision: b37bddfde36975bf6bf06ce98867e62d489d49c5 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-route-map.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -54,7 +54,7 @@
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Ejemplo de <function>Yaf_Route_Map</function></title>
<title>Ejemplo de <classname>Yaf_Route_Map</classname></title>
<programlisting role="php">
<![CDATA[
<?php
@@ -79,7 +79,7 @@ array(
</screen>
</example>
<example>
<title>Ejemplo de <function>Yaf_Route_Map</function></title>
<title>Ejemplo de <classname>Yaf_Route_Map</classname></title>
<programlisting role="php">
<![CDATA[
<?php
@@ -111,7 +111,7 @@ array(
</screen>
</example>
<example>
<title><function>Yaf_Route_Map</function>example</title>
<title>Ejemplo de <classname>Yaf_Route_Map</classname></title>
<programlisting role="php">
<![CDATA[
<?php

View File

@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 056281820311a8059f561e83537c252fd7e7f07b Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-route-regex.assemble" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>Yaf_Route_Regex::assemble</refname>
<refpurpose>Ensamblar un URL</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>string</type><methodname>Yaf_Route_Regex::assemble</methodname>
<modifier>public</modifier> <type class="union"><type>string</type><type>null</type></type><methodname>Yaf_Route_Regex::assemble</methodname>
<methodparam><type>array</type><parameter>info</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>query</parameter></methodparam>
</methodsynopsis>
@@ -20,7 +20,7 @@
Ensamblar un URL
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
@@ -28,7 +28,7 @@
<term><parameter>info</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
@@ -36,13 +36,20 @@
<term><parameter>query</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Devuelve &string; en caso de éxito o &null; en caso de fallo.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
@@ -88,14 +95,7 @@ string(49) "/module/controller/action?tkey1=tval1&tkey2=tval2"
</screen>
</example>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ecaa2146429a7f88de40dfce14718afc896b74c5 Maintainer: argosback Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<!-- EN-Revision: b37bddfde36975bf6bf06ce98867e62d489d49c5 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-route-regex.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -94,7 +94,7 @@
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Ejemplo de <function>Yaf_Route_Regex</function></title>
<title>Ejemplo de <classname>Yaf_Route_Regex</classname></title>
<programlisting role="php">
<![CDATA[
<?php
@@ -118,7 +118,7 @@
</programlisting>
</example>
<example>
<title>Ejemplo de <function>Yaf_Route_Regex(como en 2.3.0)</function></title>
<title>Ejemplo de <classname>Yaf_Route_Regex</classname>(como en 2.3.0)</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -142,7 +142,7 @@
</programlisting>
</example>
<example>
<title>Ejemplo de <function>Yaf_Route_Regex y el nombre de la zona de captura (a partir de 2.3.0)</function></title>
<title>Ejemplo de <classname>Yaf_Route_Regex</classname> y el nombre de la zona de captura (a partir de 2.3.0)</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -166,7 +166,7 @@
</programlisting>
</example>
<example>
<title>Ejemplo de <function>Yaf_Route_Regex</function></title>
<title>Ejemplo de <classname>Yaf_Route_Regex</classname></title>
<programlisting role="php">
<![CDATA[
<?php

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 056281820311a8059f561e83537c252fd7e7f07b Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-route-rewrite.assemble" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -28,7 +28,7 @@
<term><parameter>info</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
@@ -36,13 +36,20 @@
<term><parameter>query</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Devuelve &string;.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
@@ -85,13 +92,6 @@ string(57) "/product/foo/bar/tmpkey1/tmpval1/?tkey1=tval1&tkey2=tval2"
</example>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ecaa2146429a7f88de40dfce14718afc896b74c5 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: b37bddfde36975bf6bf06ce98867e62d489d49c5 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-route-rewrite.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -74,7 +74,7 @@
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Ejemplo de <function>Yaf_Route_Rewrite</function></title>
<title>Ejemplo de <classname>Yaf_Route_Rewrite</classname></title>
<programlisting role="php">
<![CDATA[
<?php
@@ -116,7 +116,7 @@ array(
</screen>
</example>
<example>
<title>Ejemplo de <function>Yaf_Route_Rewrite</function></title>
<title>Ejemplo de <classname>Yaf_Route_Rewrite</classname></title>
<programlisting role="php">
<![CDATA[
<?php
@@ -160,7 +160,7 @@ array(
</screen>
</example>
<example>
<title>Ejemplo de <function>Yaf_Route_Rewrite (como en 2.3.0)</function></title>
<title>Ejemplo de <classname>Yaf_Route_Rewrite</classname> (como en 2.3.0)</title>
<programlisting role="php">
<![CDATA[
<?php

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 056281820311a8059f561e83537c252fd7e7f07b Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-route-simple.assemble" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -28,7 +28,7 @@
<term><parameter>info</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
@@ -36,13 +36,27 @@
<term><parameter>query</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Devuelve un &string;.
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Lanza <classname>Yaf_Exception_TypeError</classname> si las claves <literal>':c'</literal> o <literal>':a'</literal> de <parameter>info</parameter> no están establecidas.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
@@ -80,13 +94,6 @@ string(64) "?m=yafmodule&c=yafcontroller&a=yafaction&tkey1=tval1&tkey2=tval2"
</example>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 056281820311a8059f561e83537c252fd7e7f07b Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-route-static.assemble" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -28,7 +28,7 @@
<term><parameter>info</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
@@ -36,13 +36,27 @@
<term><parameter>query</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Devuelve un &string;.
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Lanza <classname>Yaf_Exception_TypeError</classname> si las claves <literal>':c'</literal> y <literal>':a'</literal> de <parameter>info</parameter> no están establecidas.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
@@ -93,13 +107,6 @@ string(%d) "/yafmodule/yafcontroller/yafaction?tkey1=tval1&tkey2=tval2"
</example>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 056281820311a8059f561e83537c252fd7e7f07b Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-route-supervar.assemble" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -28,7 +28,7 @@
<term><parameter>info</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
@@ -36,13 +36,27 @@
<term><parameter>query</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Devuelve un &string;.
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Lanza <classname>Yaf_Exception_TypeError</classname> si las claves <literal>':c'</literal> y <literal>':a'</literal> de <parameter>info</parameter> no están establecidas.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
@@ -98,13 +112,6 @@ string(%d) "You need to specify the controller by ':c'"
</example>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 73fae4ee51b644b72028e610abefefced57c18ad Maintainer: seros Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<!-- EN-Revision: b37bddfde36975bf6bf06ce98867e62d489d49c5 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-route-supervar.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -46,7 +46,7 @@
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Ejemplo de <function>Yaf_Route_Supervar</function></title>
<title>Ejemplo de <classname>Yaf_Route_Supervar</classname></title>
<programlisting role="php">
<![CDATA[
<?php

View File

@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 30c2d6226d1576647c91b36b912ac841abfcafab Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 22583751fbfdaa3eaa41aeb6470d1343f5cb2c78 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-router.addconfig" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>Yaf_Router::addConfig</refname>
<refpurpose>Añadir rutas definidas en configuración al Enrutador</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
@@ -20,12 +20,12 @@
la pila de rutas de <classname>Yaf_Router</classname>
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
&no.function.parameters;
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
@@ -33,7 +33,7 @@
contener una o más configuraciones de rutas válidas.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
@@ -91,12 +91,13 @@ class Bootstrap extends Yaf_Bootstrap_Abstract{
*/
$router->addConfig(Yaf_Registry::get("config")->routes);
}
?>
]]>
</programlisting>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
@@ -107,9 +108,9 @@ class Bootstrap extends Yaf_Bootstrap_Abstract{
<member><classname>Yaf_Route_Regex</classname></member>
<member><classname>Yaf_Route_Rewrite</classname></member>
<member><classname>Yaf_Route_Map</classname></member>
</simplelist>
</refsect1>
</simplelist>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 73fae4ee51b644b72028e610abefefced57c18ad Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 4a211b7c8fb2b4410851d06c6f90f751d1f670d0 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-view-simple.assign" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -70,7 +70,7 @@ class IndexController extends Yaf_Controller_Abstract {
</programlisting>
</example>
<example>
<title>Ejemplo de <function>template</function></title>
<title>Ejemplo de template</title>
<programlisting role="php">
<![CDATA[
<html>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 73fae4ee51b644b72028e610abefefced57c18ad Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 4a211b7c8fb2b4410851d06c6f90f751d1f670d0 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-view-simple.assignref" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -77,7 +77,7 @@ class IndexController extends Yaf_Controller_Abstract {
</programlisting>
</example>
<example>
<title>Ejemplo de <function>template</function></title>
<title>Ejemplo de template</title>
<programlisting role="php">
<![CDATA[
<html>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: ecaa2146429a7f88de40dfce14718afc896b74c5 Maintainer: seros Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<!-- EN-Revision: b37bddfde36975bf6bf06ce98867e62d489d49c5 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="yaf-view-simple.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -62,7 +62,7 @@
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Ejemplo de <function>Yaf_View_Simple::__constructor</function></title>
<title>Ejemplo de <methodname>Yaf_View_Simple::__construct</methodname></title>
<programlisting role="php">
<![CDATA[
<?php

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d4b0e5ea18a47ee567fdad728e3d4c3081a0c602 Maintainer: yago Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="function.yaml-parse-file" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -56,7 +56,7 @@
<term><parameter>callbacks</parameter></term>
<listitem>
<para>
Controlador de contenido para los nodos YAML. Es un <type>array</type> associativo de
Controlador de contenido para los nodos YAML. Es un <type>array</type> asociativo de
etiquetas YAML =&gt; asociando sus <type>callback</type> correspondientes. Ver
<link linkend="yaml.callbacks.parse">Analizar callbacks</link> para más
información.

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 5e154f6c4444d45d9a5befcc012cb2dbe5000a8f Maintainer: yago Status: ready -->
<!-- Reviewed: no Maintainer: yago -->
<!-- EN-Revision: 7c1cbb3254ee96fe77b5bdf21dd3531680ef9f7b Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="function.yaml-parse-url" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>yaml_parse_url</refname>
@@ -16,7 +16,7 @@
<methodparam><type>string</type><parameter>url</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>pos</parameter><initializer>0</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter role="reference">ndocs</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>callbacks</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>callbacks</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<para>
Convierte toda o parte de una secuencia de texto en YAML a una variable en PHP.
@@ -61,7 +61,7 @@
<term><parameter>callbacks</parameter></term>
<listitem>
<para>
Controlador de contenido para los nodos YAML. Es un <type>array</type> associativo de
Controlador de contenido para los nodos YAML. Es un <type>array</type> asociativo de
etiquetas YAML =&gt; asociando sus <type>callback</type> correspondientes. Ver
<link linkend="yaml.callbacks.parse">Analizar callbacks</link> para más información
</para>
@@ -74,12 +74,24 @@
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Devuelve el valor codificado de <parameter>input</parameter> en el formato
Devuelve el valor codificado de <parameter>url</parameter> en el formato
apropiado de PHP&return.falseforfailure;. Si el valor de <parameter>pos</parameter> es <literal>-1</literal> devolverá un
<type>array</type> con una entrada por cada documento encontrado en el texto.
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<warning>
<para>
El procesamiento de entradas de usuario no confiables con <function>yaml_parse_url</function>
es peligroso si el uso de <function>unserialize</function> está habilitado para
nodos que utilizan la etiqueta <literal>!php/object</literal>. Este comportamiento puede ser
deshabilitado utilizando la configuración ini <literal>yaml.decode_php</literal>.
</para>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: b8758b0605e80c4e3610137b7502a6abeea5c69b Maintainer: yago Status: ready -->
<!-- Reviewed: yes Maintainer: yago -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="function.yaml-parse" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>yaml_parse</refname>
@@ -56,7 +56,7 @@
<term><parameter>callbacks</parameter></term>
<listitem>
<para>
Controlador de contenido para los nodos YAML. Es un <type>array</type> associativo de
Controlador de contenido para los nodos YAML. Es un <type>array</type> asociativo de
etiquetas YAML =&gt; asociando sus <type>callback</type> correspondientes. Ver
<link linkend="yaml.callbacks.parse">Analizar callbacks</link> para más
información.
@@ -201,7 +201,7 @@ array(8) {
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<warning>
@@ -213,7 +213,7 @@ array(8) {
</para>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: f052ac1bd73549125c3fc3dc68a36d4b0608a16d Maintainer: julionc Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<!-- EN-Revision: d4d5216e7a965ca194f6b1c9dee84cecab2674e5 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<section xml:id="yaml.configuration" xmlns="http://docbook.org/ns/docbook">
&reftitle.runtime;
@@ -25,6 +25,12 @@
<entry><constant>INI_ALL</constant></entry>
<entry><!-- leave empty, this will be filled by an automatic script --></entry>
</row>
<row>
<entry><link linkend="ini.yaml.decode-php">yaml.decode_php</link></entry>
<entry>0</entry>
<entry><constant>INI_ALL</constant></entry>
<entry>Añadido en 1.2.0, antes de 2.0.0 el valor predeterminado era 1</entry>
</row>
<row>
<entry><link linkend="ini.yaml.decode-timestamp">yaml.decode_timestamp</link></entry>
<entry>0</entry>
@@ -69,21 +75,37 @@
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ini.yaml.decode-timestamp">
<varlistentry xml:id="ini.yaml.decode-php">
<term>
<parameter>yaml.decode_timestamp</parameter>
<type>integer</type>
<parameter>yaml.decode_php</parameter>
<type>bool</type>
</term>
<listitem>
<para>
Controla la decodificación tanto implicita y explicita escalar de "tag:yaml.org,2002:timestamp" en documentos YAML. El valor determinado es <literal>0</literal> que no se aplica a ningunca decodificación. Un ajuste de <literal>1</literal> a usar <function>strtotime</function> para analizar el valor de un Unix timestamp. Un ajuste de <literal>2</literal> debe usar <function>date_create</function> para analizar el valor del objeto <type>DateTime</type>.
Desactivado por omisión, pero puede ser configurado como activado para que los objetos PHP serializados que tienen la etiqueta explícita "!php/object" sean deserializados.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ini.yaml.decode-timestamp">
<term>
<parameter>yaml.decode_timestamp</parameter>
<type>int</type>
</term>
<listitem>
<para>
Controla la decodificación de los escalares "tag:yaml.org,2002:timestamp" tanto implícitos como explícitos
en el flujo del documento YAML. La configuración predeterminada de <literal>0</literal> no aplicará ninguna
decodificación. Una configuración de <literal>1</literal> utilizará <function>strtotime</function>
para analizar el valor de la marca de tiempo como una marca de tiempo Unix. Una configuración
de <literal>2</literal> utilizará <function>date_create</function> para analizar el valor de la marca
de tiempo como un objeto <type>DateTime</type>.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ini.yaml.output-canonical">
<term>
<parameter>yaml.output_canonical</parameter>
<type>boolean</type>
<type>bool</type>
</term>
<listitem>
<para>
@@ -94,7 +116,7 @@
<varlistentry xml:id="ini.yaml.output-indent">
<term>
<parameter>yaml.output_indent</parameter>
<type>integer</type>
<type>int</type>
</term>
<listitem>
<para>
@@ -106,7 +128,7 @@
<varlistentry xml:id="ini.yaml.output-width">
<term>
<parameter>yaml.output_width</parameter>
<type>integer</type>
<type>int</type>
</term>
<listitem>
<para>

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: jesus_cova Status: ready -->
<!-- EN-Revision: 22583751fbfdaa3eaa41aeb6470d1343f5cb2c78 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<refentry xml:id="function.yaz-ccl-parse" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>yaz_ccl_parse</refname>
@@ -16,11 +17,11 @@
</methodsynopsis>
<para>
Esta función invoca un analizador CCL. Convierte una consulta dada CCL FIND a
una consulta RPN la cual puede ser pasada también a la función <function>yaz_search</function>
una consulta RPN la cual puede ser pasada también a la función <function>yaz_search</function>
para ejecutar la búsqueda.
</para>
<para>
Para definir un conjunto de campos validos CCL llaman preferiblemente a <function>yaz_ccl_conf</function>
Para definir un conjunto de campos validos CCL llaman preferiblemente a <function>yaz_ccl_conf</function>
para definirlo en la función.
</para>
</refsect1>
@@ -53,24 +54,24 @@
</para>
<para>
En caso de fallo, tres índices son establecidos en este arreglo para indicar la causa
del fallo:
del fallo:
<itemizedlist>
<listitem>
<para>
<literal>errorcode</literal> - El código de error CCL (entero)
</para>
</listitem>
</listitem>
<listitem>
<para>
<literal>errorstring</literal> - El error CCL de cadena
</para>
</listitem>
</listitem>
<listitem>
<para>
<literal>errorpos</literal> - aproxima la posición en una consulta de fallo
(el entero es el carácter de posición)
</para>
</listitem>
</listitem>
</itemizedlist>
</para>
</listitem>
@@ -89,15 +90,15 @@
<example>
<title>Análisis CCL</title>
<para>
Se va a intentar hacer una búsqueda con CCL. En el ejemplo de abajo,
<literal>$ccl</literal> es una consulta CCL.
Se va a intentar hacer una búsqueda con CCL. En el ejemplo de abajo,
<literal>$ccl</literal> es una consulta CCL.
</para>
<programlisting role="php">
<![CDATA[
<?php
yaz_ccl_conf($id, $fields); // ver el ejemplo para yaz_ccl_conf
if (!yaz_ccl_parse($id, $ccl, &$cclresult)) {
if (!yaz_ccl_parse($id, $ccl, $cclresult)) {
echo 'Error: ' . $cclresult["errorstring"];
} else {
$rpn = $cclresult["rpn"];

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 6a5b42e0d34c76890fd96be2b0b57516363b4c8a Maintainer: edwincartagenah Status: ready -->
<!-- EN-Revision: 87d3bf2e9ea7da5abbeca3e60ea7cf7abfa6f7f3 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<!-- splitted from ./index.xml, last change in rev 1.66 -->
<chapter xml:id="security.cgi-bin" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Instalado como CGI binario</title>
@@ -12,11 +13,12 @@
configuraciones que por alguna razón no desean integrar PHP como un
módulo dentro del software de servidor (como Apache), o usarán PHP con
diferentes tipos de envoltorios <acronym>CGI</acronym> para crear entornos
seguros chroot y setuid para scripts. Esta configuración usualmente involucra la instalación
del binario ejecutable de PHP en el directorio cgi-bin del servidor web. La recomendación
<link xlink:href="&url.cert;">CA-96.11</link> del CERT recomienda
que está en contra de colocar cualquiera de los intérpretes dentro de cgi-bin. Aún si
el binario de PHP puede ser usado como un intérprete independiente, PHP está diseñado
seguros <command>chroot</command> y <command>setuid</command> para scripts.
Esta configuración usualmente involucra la instalación del binario
ejecutable de <command>php</command> en el directorio <filename class="directory">cgi-bin</filename>
del servidor web. La recomendación <link xlink:href="&url.cert;">CA-96.11</link> del CERT recomienda
que está en contra de colocar cualquiera de los intérpretes dentro de <filename class="directory">cgi-bin</filename>.
Aún si el binario de <command>php</command> puede ser usado como un intérprete independiente, PHP está diseñado
para prevenir los ataques que esta configuración hace posible:
</simpara>
<itemizedlist>
@@ -26,13 +28,13 @@
role="url">http://mi.servidor/cgi-bin/php?/etc/passwd</filename>
</simpara>
<simpara>
La consulta de información en una URL después del signo de interrogación (?) es
La consulta de información en una URL después del signo de interrogación (<literal>?</literal>) es
pasado como argumento de la línea de comandos al intérprete por la interfaz
del CGI. Usualmente los intérpretes abren y ejecutan el fichero
especificado como el primer argumento en la línea de comandos.
</simpara>
<simpara>
Cuando es invocado como un binario de CGI, PHP se rehusa a interpretar los
Cuando es invocado como un binario de CGI, <command>php</command> se niega a interpretar los
argumentos de línea de comandos.
</simpara>
</listitem>
@@ -47,7 +49,7 @@
convencionalmente utilizado para especificar el nombre del fichero
a ser abierto e interpretado por el programa <acronym>CGI</acronym>.
Usualmente las directivas de configuración de algunos servidores web (Apache:
Acción) son utilizados para redirigir peticiones a los documentos como
<literal>Action</literal>) son utilizados para redirigir peticiones a los documentos como
<filename role="url">http://mi.servidor/directorio/secreto/script.php</filename> al
intérprete de PHP. Con esta configuración, el servidor web revisa primero
los permisos de acceso a los directorios <filename
@@ -57,7 +59,7 @@
Desafortunadamente, si la petición es proporcionada originalmente en esta forma,
no se revisan los accesos a los directorios hechos por el servidor web <filename
role="uri">/directorio/secreto/script.php</filename>, sino solamente al fichero
<filename role="uri">/cgi-bin/php</filename>. De esta forma
<filename role="uri">/cgi-bin/php</filename>. De esta forma
<filename role="uri">/cgi-bin/php</filename> cualquier usuario está habilitado a acceder
a cualquier documento protegido en el servidor web.
</simpara>
@@ -92,7 +94,7 @@
</simpara>
<simpara>
La redirección puede ser configurada en Apache utilizando directivas
Action y AddHandler (vea más abajo).
<literal>Action</literal> y <literal>AddHandler</literal> (vea más abajo).
</simpara>
</sect1>
@@ -104,7 +106,7 @@
previene a cualquiera que llame a PHP
directamente por medio de una URL como esta <filename
role="php">http://mi.servidor/cgi-bin/php/directoriosecreto/script.php</filename>.
En cambio, PHP solamente lo analizará en este modo si éste se ha ido a través de
En cambio, <command>php</command> solamente lo analizará en este modo si éste se ha ido a través de
una regla directa del servidor web.
</simpara>
<simpara>
@@ -120,7 +122,7 @@ AddHandler php-script .php
<simpara>
Esta opción ha sido probada solamente con el servidor web Apache, y
se basa en que en Apache se configure en una variable de entorno no-estándar de CGI
<envar>REDIRECT_STATUS</envar> para peticiones de redirección. Si su
<envar>REDIRECT_STATUS</envar> para peticiones de redirección. Si su
servidor web no soporta ninguna forma de decirle si la petición es
directa o redirigida, usted no puede utilizar esta opción y debe usar
una de las otras formas de ejecutar la versión CGI aquí documentadas.
@@ -132,10 +134,10 @@ AddHandler php-script .php
<simpara>
Para incluir contenido activo, como scripts y ejecutables, en los
directorios de documentos del servidor web es algunas veces considerado una práctica
insegura. Si, por el hecho del algún error de configuración, los scripts
insegura. Si, por el hecho del algún error de configuración, los scripts
no se ejecutan y son mostrados como documentos HTML regulares, esto
podría resultar en una fuga de información de propiedad intelectual
o de información de seguridad como las contraseñas. Por lo tanto muchos Administradores de Sistemas
o de información de seguridad como las contraseñas. Por lo tanto muchos Administradores de Sistemas
preferirán configurar otra estructura de directorios para scripts que sean
accesibles solamente a través del CGI de PHP, y por lo tanto siempre interpretado y no desplegado como tal.
</simpara>
@@ -159,7 +161,7 @@ AddHandler php-script .php
</simpara>
<simpara>
Otra opción utilizable es esta <link
linkend="ini.user-dir">user_dir</link>. Cuando user_dir no está configurado,
linkend="ini.user-dir">user_dir</link>. Cuando user_dir no está configurado,
lo único que controla el fichero abierto es <parameter>doc_root</parameter>.
Al abrir una URL como <filename
role="url">http://mi.servidor/~usuario/documento.php</filename> no resulta
@@ -168,7 +170,7 @@ AddHandler php-script .php
doc_root (si, un nombre de directorio que inicia con una a tilde [<literal>~</literal>]).
</simpara>
<simpara>
Si user_dir es configurado, por ejemplo <filename
Si <parameter>user_dir</parameter> es configurado, por ejemplo <filename
role="dir">public_php</filename>, una petición como <filename
role="url">http://mi.servidor/~usuario/doc.php</filename> abrirá un
fichero llamado <filename>doc.php</filename> bajo el directorio
@@ -189,7 +191,7 @@ AddHandler php-script .php
<title>Caso 4: El analizador de PHP fuera del árbol de la web</title>
<para>
Una opción muy segura es poner el binario analizador de PHP en algún lugar
fuera del árbol de ficheros de la web. En <filename
fuera del árbol de ficheros de la web. En <filename
role="dir">/usr/local/bin</filename>, por ejemplo. El único inconveniente
real con esta opción es que ahora tendrá que poner una línea similar a:
<informalexample>
@@ -199,8 +201,8 @@ AddHandler php-script .php
]]>
</programlisting>
</informalexample>
como la primera línea de cualquier fichero que contenga etiquetas de PHP. También
necesitará hacer que el fichero sea ejecutable. Eso significa, tratarlo exactamente
como la primera línea de cualquier fichero que contenga etiquetas de PHP. También
necesitará hacer que el fichero sea ejecutable. Eso significa, tratarlo exactamente
como trataría cualquier otro script de CGI escrito en Perl, sh, bash, o cualquier
otro lenguaje común de script el cual utilice <literal>#!</literal> como mecanismo
de ejecución de si mismo.

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 5f7a949cfc6f43d481d3a9513f9ee19db9afe21d Maintainer: andresdzphp Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<!-- EN-Revision: 7204e2dbb9b484c8b67bb5ad4a93fa1369c5b317 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<chapter xml:id="security.database" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Seguridad en bases de datos</title>
<simpara>
Hoy en día, las bases de datos son componentes esenciales de cualquier aplicación web,
permitiendo a los sitios web proveer variedad de contenido dinámico. Puesto que se puede
@@ -30,7 +30,7 @@
que tenga almacenada. Un buen diseño del esquema de la base de datos y de la aplicación
se ocupará de sus mayores temores.
</simpara>
<sect1 xml:id="security.database.design">
<title>Diseño de bases de datos</title>
<simpara>
@@ -56,7 +56,7 @@
solamente puede efectuar los cambios que la aplicación permita.
</simpara>
</sect1>
<sect1 xml:id="security.database.connection">
<title>Conexión a una base de datos</title>
<simpara>
@@ -72,7 +72,7 @@
<acronym>PHP</acronym> y la base de datos por medio de SSL.
</simpara-->
</sect1>
<sect1 xml:id="security.database.storage">
<title>Modelo de almacenamiento cifrado</title>
<simpara>
@@ -97,7 +97,7 @@
descifra al obtenerlos. Véanse las referencias para ejemplos adicionales del
funcionamiento del cifrado.
</simpara>
<sect2 xml:id="security.database.storage.hashing">
<title>'Hashing'</title>
<simpara>
@@ -122,20 +122,20 @@
<?php
// Almacenar el hash de la contraseña
$consulta = sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
pg_escape_string($nombre_usuario),
password_hash($contraseña, PASSWORD_DEFAULT));
$resultado = pg_query($conexión, $consulta);
$query = sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
pg_escape_string($nombre_usuario),
password_hash($password, PASSWORD_DEFAULT));
$result = pg_query($connection, $query);
// Consultar si el usuario envió la contraseña correcta
$consulta = sprintf("SELECT pwd FROM users WHERE name='%s';",
$query = sprintf("SELECT pwd FROM users WHERE name='%s';",
pg_escape_string($nombre_usuario));
$fila = pg_fetch_assoc(pg_query($conexión, $consulta));
$row = pg_fetch_assoc(pg_query($connection, $query));
if ($fila && password_verify($contraseña, $fila['pwd'])) {
echo 'Bienvenido, ' . htmlspecialchars($nombre_usuario) . '!';
if ($row && password_verify($contraseña, $row['pwd'])) {
echo 'Bienvenido, ' . htmlspecialchars($username) . '!';
} else {
echo 'La autenticación ha fallado para ' . htmlspecialchars($nombre_usuario) . '.';
echo 'La autenticación ha fallado para ' . htmlspecialchars($username) . '.';
}
?>
@@ -144,7 +144,7 @@ if ($fila && password_verify($contraseña, $fila['pwd'])) {
</example>
</sect2>
</sect1>
<sect1 xml:id="security.database.sql-injection">
<title>Inyección de SQL</title>
<simpara>
@@ -163,9 +163,9 @@ if ($fila && password_verify($contraseña, $fila['pwd'])) {
<![CDATA[
<?php
$índice = $_GET['offset']; // ¡Cuidado, no hay validación en la entrada de datos!
$consulta = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $índice;";
$resultado = pg_query($conexión, $consulta);
$offset = $_GET['offset']; // ¡Cuidado, no hay validación en la entrada de datos!
$query = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";
$result = pg_query($conn, $query);
?>
]]>
@@ -192,7 +192,7 @@ insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
<note>
<para>
Es una técnica común forzar al analizador SQL a ignorar el resto de la
consulta escrita por el desarrollador con <literal>--</literal>, lo cual
consulta escrita por el desarrollador con <literal>--</literal>, lo cual
representa un comentario en SQL.
</para>
</note>
@@ -213,9 +213,9 @@ insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
<![CDATA[
<?php
$consulta = "SELECT id, name, inserted, size FROM products
WHERE size = '$tamaño'";
$resultado = odbc_exec($conexión, $consulta);
$query = "SELECT id, name, inserted, size FROM products
WHERE size = '$size'";
$result = odbc_exec($conexión, $query);
?>
]]>
@@ -242,7 +242,7 @@ union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from use
<programlisting role="php">
<![CDATA[
<?php
$consulta = "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";
$query = "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";
?>
]]>
</programlisting>
@@ -258,10 +258,10 @@ $consulta = "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";
<?php
// $uid: ' or uid like '%admin%
$consulta = "UPDATE usertable SET pwd='...' WHERE uid='' or uid like '%admin%';";
$query = "UPDATE usertable SET pwd='...' WHERE uid='' or uid like '%admin%';";
// $pwd: jejeje', trusted=100, admin='yes
$consulta = "UPDATE usertable SET pwd='jejeje', trusted=100, admin='yes' WHERE
$query = "UPDATE usertable SET pwd='jejeje', trusted=100, admin='yes' WHERE
...;";
?>
@@ -282,8 +282,8 @@ $consulta = "UPDATE usertable SET pwd='jejeje', trusted=100, admin='yes' WHERE
<![CDATA[
<?php
$consulta = "SELECT * FROM products WHERE id LIKE '%$prod%'";
$resultado = mssql_query($consulta);
$query = "SELECT * FROM products WHERE id LIKE '%$prod%'";
$result = mssql_query($query);
?>
]]>
@@ -291,16 +291,16 @@ $resultado = mssql_query($consulta);
</example>
Si un atacante envía el valor
<literal>a%' exec master..xp_cmdshell 'net user test testpass /ADD' --</literal>
a <varname>$prod</varname>, la <varname>$consulta</varname> será:
a <varname>$prod</varname>, la <varname>$query</varname> será:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$consulta = "SELECT * FROM products
$query = "SELECT * FROM products
WHERE id LIKE '%a%'
exec master..xp_cmdshell 'net user test testpass /ADD' --%'";
$resultado = mssql_query($consulta);
$result = mssql_query($query);
?>
]]>
@@ -323,10 +323,14 @@ $resultado = mssql_query($consulta);
<imageobject>
<imagedata fileref="en/security/figures/xkcd-bobby-tables.png" format="PNG"/>
</imageobject>
<caption>
<simpara>
Imagen cortesía de <link xlink:href="&url.xkcd;327">xkcd</link>
</simpara>
</caption>
</mediaobject>
Imagen cortesía de <link xlink:href="&url.xkcd;327">xkcd</link>
</para>
<sect2 xml:id="security.database.avoiding">
<title>Técnicas de evitación</title>
<para>

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: edwincartagenah Status: ready -->
<!-- EN-Revision: ae725a44023db78b9f6e9d2a0baac8c8dc337d38 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<!-- splitted from ./index.xml, last change in rev 1.66 -->
<chapter xml:id="security.errors" xmlns="http://docbook.org/ns/docbook">
<title>Reportando errores</title>
@@ -33,7 +34,7 @@
el desarrollador que está intentando depurar un script, indicando qué cosas,
como por ejemplo, qué función o qué fichero de PHP falló, y el número de línea en donde
la falla ocurrió. Toda esta es la información que puede ser explotada.
Esto no es algo raro para un desarrollador de PHP que utilice las funciones
Esto no es algo raro para un desarrollador de PHP que utilice las funciones
<function>show_source</function>, <function>highlight_string</function>, o
<function>highlight_file</function> como una medida de depuración, pero en
un sitio en escena, esto puede exponer variables ocultas, sintáxis sin revisar,
@@ -62,7 +63,7 @@
</para>
<para>
Por ejemplo, el estilo común de un error genérico de PHP indica que un sistema
ciertamente está ejecutando PHP. Si un atacante está en una página .html, y quiere
ciertamente está ejecutando PHP. Si un atacante está en una página <literal>.html</literal>, y quiere
probar qué motor hay tras de ese servidor (para buscar debilidades en el sistema),
lo alimenta con datos erróneos que lo podrían habilitar a que determine
que ese sistema fue construido con PHP.
@@ -112,10 +113,10 @@
<programlisting role="php">
<![CDATA[
<?php
if ($usuario) { // No se ha inicializado o revisado antes de utilizar
$permitir_acceso = 1;
if ($username) { // No se ha inicializado o revisado antes de utilizar
$good_login = 1;
}
if ($permitir_acceso == 1) { // Si la prueba anterior falla, los que no estén inicializados o comprobados antes de utilizar, tendrán acceso
if ($good_login == 1) { // Si la prueba anterior falla, los que no estén inicializados o comprobados antes de utilizar, tendrán acceso
readfile("/ruta/hacia/datos/altamente/sensibles/index.html");
}
?>

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: c5d92fd7127e059d448d43ba339f19956f83b05a Maintainer: jvenegasperu Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 91570644fbbe4d23e79908e1a04c4c4d003fe587 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<!-- splitted from ./index.xml, last change in rev 1.66 -->
<chapter xml:id="security.filesystem" xmlns="http://docbook.org/ns/docbook">
<title>Seguridad del Sistema de Archivos</title>
<simpara>
<acronym>PHP</acronym> está sujeto a la seguridad integrada en la mayoría de sistemas de servidores con
<acronym>PHP</acronym> está sujeto a la seguridad integrada en la mayoría de sistemas de servidores con
respecto a los permisos de archivos y directorios. Esto permite
controlar qué archivos en el sistema de archivos se pueden leer. Se debe
tener cuidado con los archivos que son legibles para garantizar
@@ -16,16 +16,16 @@
<simpara>
Desde que <acronym>PHP</acronym> fue diseñado para permitir el acceso a nivel de usuarios para el sistema de archivos,
es perfectamente posible escribir un script <acronym>PHP</acronym> que le permita
leer archivos del sistema como /etc/passwd, modificar sus conexiones de red,
leer archivos del sistema como <filename>/etc/passwd</filename>, modificar sus conexiones de red,
enviar trabajos de impresión masiva, etc. Esto tiene algunas
implicaciones obvias, es necesario asegurarse que los archivos
que se van a leer o escribir son los apropiados.
</simpara>
<simpara>
Considere el siguiente script, donde un usuario indica que
quiere borrar un archivo en su directorio home. Esto supone una
quiere borrar un archivo en su directorio home. Esto supone una
situación en la que una interfaz web en <acronym>PHP</acronym> es usada regularmente para gestionar archivos,
por lo que es necesario que el usuario Apache pueda borrar archivos en los
por lo que es necesario que el usuario Apache pueda borrar archivos en los
directorios home de los usuarios.
</simpara>
<para>
@@ -34,6 +34,7 @@
<programlisting role="php">
<![CDATA[
<?php
// eliminar un archivo del directorio personal del usuario
$username = $_POST['user_submitted_name'];
$userfile = $_POST['user_submitted_filename'];
@@ -43,20 +44,22 @@ unlink("$homedir/$userfile");
echo "El archivo ha sido eliminado!";
?>
]]>
</programlisting>
</example>
Dado que el nombre de usuario y el nombre del archivo son enviados desde un formulario,
Dado que el nombre de usuario y el nombre del archivo son enviados desde un formulario,
estos pueden representar un nombre de archivo y un nombre de usuario que pertenecen a otra persona,
incluso se podría borrar el archivo a pesar que se supone que no estaría permitido hacerlo.
En este caso, usted desearía usar algún otro tipo de autenticación.
Considere lo que podría suceder si las variables enviadas son
"../etc/" y "passwd". El código entonces se ejecutaría efectivamente como:
<literal>"../etc/"</literal> y <literal>"passwd"</literal>. El código entonces se ejecutaría efectivamente como:
<example>
<title>... Un ataque al sistema de archivos</title>
<programlisting role="php">
<![CDATA[
<?php
// elimina un archivo desde cualquier lugar en el disco duro al que
// el usuario de PHP tiene acceso. Si PHP tiene acceso de root:
$username = $_POST['user_submitted_name']; // "../etc"
@@ -67,6 +70,7 @@ unlink("$homedir/$userfile"); // "/home/../etc/passwd"
echo "El archivo ha sido eliminado!";
?>
]]>
</programlisting>
</example>
@@ -90,6 +94,7 @@ echo "El archivo ha sido eliminado!";
<programlisting role="php">
<![CDATA[
<?php
// elimina un archivo del disco duro al que
// el usuario de PHP tiene acceso.
$username = $_SERVER['REMOTE_USER']; // usando un mecanismo de autenticación
@@ -103,6 +108,7 @@ if (file_exists($filepath) && unlink($filepath)) {
} else {
$logstring = "No se ha podido eliminar $filepath\n";
}
$fp = fopen("/home/logging/filedelete.log", "a");
fwrite($fp, $logstring);
fclose($fp);
@@ -113,15 +119,16 @@ echo htmlentities($logstring, ENT_QUOTES);
]]>
</programlisting>
</example>
Sin embargo, incluso esto no está exento de defectos. Si la autenticación
Sin embargo, incluso esto no está exento de defectos. Si la autenticación
del sistema permite a los usuarios crear sus propios inicios de sesión de usuario, y un usuario
eligió la entrada "../etc/", el sistema está expuesto una vez más. Por
eligió la entrada <literal>"../etc/"</literal>, el sistema está expuesto una vez más. Por
esta razón, puede que prefiera escribir un chequeo más personalizado:
<example>
<title>Comprobación más segura del nombre de archivo</title>
<programlisting role="php">
<![CDATA[
<?php
$username = $_SERVER['REMOTE_USER']; // usando un mecanismo de autenticación
$userfile = $_POST['user_submitted_filename'];
$homedir = "/home/$username";
@@ -132,7 +139,8 @@ if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $us
die("nombre de usuario o nombre de archivo incorrecto");
}
//etc...
// etc.
?>
]]>
</programlisting>
@@ -140,18 +148,18 @@ if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $us
</para>
<para>
Dependiendo de sus sistema operativo, hay una gran variedad de archivos
a los que debe estar atento, esto incluye las entradas de dispositivos (/dev/
o COM1), archivos de configuracion (archivos /etc/ y archivos .ini),
las muy conocidas carpetas de almacenamiento (/home/, Mis documentos), etc. Por esta
a los que debe estar atento, esto incluye las entradas de dispositivos (<filename>/dev/</filename>
o <filename>COM1</filename>), archivos de configuracion (archivos <filename>/etc/</filename> y archivos <literal>.ini</literal>),
las muy conocidas carpetas de almacenamiento (<filename>/home/</filename>, <filename>My Documents</filename>), etc. Por esta
razón, por lo general es más fácil crear una política en donde se prohíba
todo excepto lo que expresamente se permite.
todo excepto lo que expresamente se permite.
</para>
<sect1 xml:id="security.filesystem.nullbytes">
<title>Cuestiones relacionadas a bytes nulos</title>
<simpara>
Como <acronym>PHP</acronym> utiliza las funciones de C para operaciones relacionadas al sistema de archivos,
se podría manejar bytes nulos de manera bastante inesperada.
Como un byte nulo denota el fin de una cadena en C, las cadenas que contengan estos
Como un byte nulo denota el fin de una cadena en C, las cadenas que contengan estos
no serán consideradas por completo, sino sólo hasta que ocurra un byte nulo.
El siguiente ejemplo muestra un código vulnerable que presenta este problema:
@@ -161,12 +169,14 @@ if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $us
<programlisting role="php">
<![CDATA[
<?php
$file = $_GET['file']; // "../../etc/passwd\0"
if (file_exists('/home/wwwrun/'.$file.'.php')) {
if (file_exists('/home/wwwrun/' . $file . '.php')) {
// file_exists devolverá true si el archivo /home/wwwrun/../../etc/passwd existe
include '/home/wwwrun/'.$file.'.php';
include '/home/wwwrun/' . $file . '.php';
// el archivo /etc/passwd se incluirá
}
?>
]]>
</programlisting>
@@ -180,7 +190,8 @@ if (file_exists('/home/wwwrun/'.$file.'.php')) {
<programlisting role="php">
<![CDATA[
<?php
$file = $_GET['file'];
$file = $_GET['file'];
// Lista blanca de valores posibles
switch ($file) {
@@ -192,6 +203,7 @@ switch ($file) {
default:
include '/home/wwwrun/include/main.php';
}
?>
]]>
</programlisting>

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ab6785b01ce1006e3a9761988575289f40c9b678 Maintainer: yago Status: ready -->
<!-- EN-Revision: f0ed705e1ac34fed4c92979f63bee74c382f991b Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: Marqitos -->
<!-- splitted from ./index.xml, last change in rev 1.66 -->
<chapter xml:id="security.variables" xmlns="http://docbook.org/ns/docbook">
<title>Datos Enviados por el Usuario</title>
@@ -19,14 +20,14 @@
// eliminar un archivo del directorio personal del usuario .. ¿o
// quizás de alguien más?
unlink ($variable_malvada);
unlink ($evil_var);
// Imprimir el registro del acceso... ¿o quizás una entrada de /etc/passwd?
fwrite ($desc_archivo, $variable_malvada);
fwrite ($fp, $evil_var);
// Ejecutar algo trivial.. ¿o rm -rf *?
system ($variable_malvada);
exec ($variable_malvada);
system ($evil_var);
exec ($evil_var);
?>
]]>
@@ -73,13 +74,24 @@ exec ($variable_malvada);
su sistema, pero puede ayudar a mejorarla.
</para>
<para>
Puede que también desee considerar la deshabilitación de register_globals,
magic_quotes, u otros parámetros convenientes que pueden causar confusión
sobre la validez, fuente o valor de una determinada variable. Trabajar con
<acronym>PHP</acronym> en modo error_reporting(E_ALL) también puede ayudarle a advertir
variables que están siendo usadas antes de ser chequeadas o inicializadas
(de modo que puede prevenir que datos inusuales produzcan operaciones
inadvertidas).
Mejore la seguridad deshabilitando las configuraciones de conveniencia que
oscurecen el origen, la validez o la integridad de los datos de entrada.
La creación implícita de variables y la entrada no verificada pueden llevar a
vulnerabilidades como ataques de inyección y manipulación de datos.
</para>
<para>
Características como <literal>register_globals</literal> y
<literal>magic_quotes</literal> (ambas eliminadas en PHP 5.4.0) contribuyeron
a estos riesgos al crear automáticamente variables a partir de la entrada del
usuario y escapar datos de manera inconsistente. Aunque ya no están en PHP,
riesgos similares persisten si la gestión de la entrada es incorrecta.
</para>
<para>
Habilite <link linkend="function.error-reporting">error_reporting(E_ALL)</link> para
ayudar a detectar variables no inicializadas y validar la entrada. Utilice
tipos estrictos (<link linkend="language.types.declarations.strict">declare(strict_types=1)</link>,
introducido en PHP 7) para imponer la seguridad de tipos, prevenir conversiones
de tipos no intencionadas y mejorar la seguridad general.
</para>
</chapter>