<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/security.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'security.variables.php',
    1 => 'Datos Enviados por el Usuario',
    2 => 'Datos Enviados por el Usuario',
  ),
  'up' => 
  array (
    0 => 'security.php',
    1 => 'Seguridad',
  ),
  'prev' => 
  array (
    0 => 'security.errors.php',
    1 => 'Reportando errores',
  ),
  'next' => 
  array (
    0 => 'security.hiding.php',
    1 => 'Ocultar PHP',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'security/variables.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="security.variables" class="chapter">
 <h1 class="title">Datos Enviados por el Usuario</h1>

 <p class="para">
  Las mayores debilidades de muchos programas <abbr title="PHP: Hypertext Preprocessor">PHP</abbr> no son inherentes al
  lenguaje mismo, sino simplemente un problema generado cuando se escribe
  código sin pensar en la seguridad. Por esta razón, usted debería tomarse
  siempre el tiempo para considerar las implicaciones de cada pedazo de
  código, para averiguar el posible peligro involucrado cuando una variable
  inesperada es enviada.
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Uso Peligroso de Variables</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// eliminar un archivo del directorio personal del usuario .. ¿o<br />// quizás de alguien más?<br /><br /></span><span style="color: #0000BB">unlink </span><span style="color: #007700">(</span><span style="color: #0000BB">$evil_var</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Imprimir el registro del acceso... ¿o quizás una entrada de /etc/passwd?<br /></span><span style="color: #0000BB">fwrite </span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">$evil_var</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Ejecutar algo trivial.. ¿o rm -rf *?<br /></span><span style="color: #0000BB">system </span><span style="color: #007700">(</span><span style="color: #0000BB">$evil_var</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">exec </span><span style="color: #007700">(</span><span style="color: #0000BB">$evil_var</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  Usted debería examinar siempre, y cuidadosamente su código para asegurarse
  de que cualquier variable siendo enviada desde un navegador web sea
  chequeada apropiadamente, y preguntarse a sí mismo:
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     ¿Este script afectará únicamente los archivos que se pretende?
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     ¿Puede tomarse acción sobre datos inusuales o indeseados?
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     ¿Puede ser usado este script en formas malintencionadas?
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     ¿Puede ser usado en conjunto con otros scripts en forma negativa?
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     ¿Serán adecuadamente registradas las transacciones?
    </span>
   </li>
  </ul>
 </p>
 <p class="para">
  Al preguntarse adecuadamente estas preguntas mientras escribe su script,
  en lugar de hacerlo posteriormente, usted previene una desafortunada
  re-implementación del programa cuando desee incrementar el nivel de
  seguridad. Al comenzar con esta mentalidad, no garantizará la seguridad de
  su sistema, pero puede ayudar a mejorarla.
 </p>
 <p class="para">
  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.
 </p>
 <p class="para">
  Características como <code class="literal">register_globals</code> y
  <code class="literal">magic_quotes</code> (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.
 </p>
 <p class="para">
  Habilite <a href="function.error-reporting.php" class="link">error_reporting(E_ALL)</a> para
  ayudar a detectar variables no inicializadas y validar la entrada. Utilice
  tipos estrictos (<a href="language.types.declarations.php#language.types.declarations.strict" class="link">declare(strict_types=1)</a>,
  introducido en PHP 7) para imponer la seguridad de tipos, prevenir conversiones
  de tipos no intencionadas y mejorar la seguridad general.
 </p>
</div>
<?php manual_footer($setup); ?>