<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/security.cgi-bin.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'security.cgi-bin.attacks.php',
    1 => 'Ataques posibles',
    2 => 'Ataques posibles',
  ),
  'up' => 
  array (
    0 => 'security.cgi-bin.php',
    1 => 'Instalado como CGI binario',
  ),
  'prev' => 
  array (
    0 => 'security.cgi-bin.php',
    1 => 'Instalado como CGI binario',
  ),
  'next' => 
  array (
    0 => 'security.cgi-bin.default.php',
    1 => 'Caso 1: Ficheros p&uacute;blicos servidos solamente',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'security/cgi-bin.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="security.cgi-bin.attacks" class="sect1">
    <h2 class="title">Ataques posibles</h2>
    <p class="simpara">
     Usar PHP como un binario <abbr title="Common Gateway Interface">CGI</abbr> es una opción para
     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 <abbr title="Common Gateway Interface">CGI</abbr> para crear entornos
     seguros <strong class="command">chroot</strong> y <strong class="command">setuid</strong> para scripts.
     Esta configuración usualmente involucra la instalación del binario
     ejecutable de <strong class="command">php</strong> en el directorio <var class="filename">cgi-bin</var>
     del servidor web. La recomendación <a href="http://www.cert.org/advisories/CA-1996-11.html" class="link external">&raquo;&nbsp;CA-96.11</a> del CERT recomienda
     que está en contra de colocar cualquiera de los intérpretes dentro de <var class="filename">cgi-bin</var>.
     Aún si el binario de <strong class="command">php</strong> puede ser usado como un intérprete independiente, PHP está diseñado
     para prevenir los ataques que esta configuración hace posible:
    </p>
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       Accediendo a los ficheros del sistema: <var class="filename">http://mi.servidor/cgi-bin/php?/etc/passwd</var>
      </span>
      <span class="simpara">
       La consulta de información en una URL después del signo de interrogación (<code class="literal">?</code>)  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.
      </span>
      <span class="simpara">
       Cuando es invocado como un binario de CGI, <strong class="command">php</strong> se niega a interpretar los
       argumentos de línea de comandos.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       Accediendo a cualquier documento web en el servidor: <var class="filename">http://mi.servidor/cgi-bin/php/directorio/secreto/doc.html</var>
      </span>
      <span class="simpara">
       Parte de la ruta de información de la URL después del nombre del binario de PHP,
       <var class="filename">/directorio/secreto/doc.html</var> es
       convencionalmente utilizado para especificar el nombre del fichero
       a ser abierto e interpretado por el programa <abbr title="Common Gateway Interface">CGI</abbr>.
       Usualmente las directivas de configuración de algunos servidores web (Apache:
       <code class="literal">Action</code>) son utilizados para redirigir peticiones a los documentos como
       <var class="filename">http://mi.servidor/directorio/secreto/script.php</var> al
       intérprete de PHP.  Con esta configuración, el servidor web revisa primero
       los permisos de acceso a los directorios <var class="filename">/directorio/secreto</var>, y después crea la
       petición redirigida <var class="filename">http://mi.servidor/cgi-bin/php/directorio/secreto/script.php</var>.
       Desafortunadamente, si la petición es proporcionada originalmente en esta forma,
       no se revisan los accesos a los directorios hechos por el servidor web  <var class="filename">/directorio/secreto/script.php</var>, sino solamente al fichero
       <var class="filename">/cgi-bin/php</var>. De esta forma
       <var class="filename">/cgi-bin/php</var> cualquier usuario está habilitado a acceder
       a cualquier documento protegido en el servidor web.
      </span>
      <span class="simpara">
       En PHP, las directivas de configuración en tiempo de ejecución <a href="ini.core.php#ini.cgi.force-redirect" class="link">cgi.force_redirect</a>, <a href="ini.core.php#ini.doc-root" class="link">doc_root</a> y <a href="ini.core.php#ini.user-dir" class="link">user_dir</a> pueden ser utilizadas para prevenir
       este ataque, si el árbol de documentos del servidor tiene cualquiera de estos directorios
       con restricciones de acceso.  Véase más abajo para una explicación completa
       de las diferentes combinaciones.
      </span>
     </li>
    </ul>
   </div><?php manual_footer($setup); ?>