Validación de los datos de entrada en PHP

RECU-0614 (Recurso Ejemplo)

Descripción

Cuando se le ofrece a un usuario la posibilidad de presentar algún tipo de valor a través de un formulario, tiene la considerable ventaja de saber de antemano el tipo de entrada que debería estar recibiendo. Esto debería hacer que fuera relativamente fácil llevar a cabo una sencilla comprobación de la validez del dato entrada, comprobando si es del tipo esperado, la longitud y el formato del mismo.

Cuando se comprueba la longitud de la entrada del usuario, se debe evitar el desbordamiento del buffer y los ataques de negación de los servicios. La longitud de una cadena se puede comprobar con strlen (), que cuenta el número de caracteres en una cadena.

Más allá del tipo de variable y la longitud, a veces es importante comprobar el formato de la valores proporcionados por el usuario. En sentido estricto, una dirección de correo electrónico o una cadena de fecha no es un tipo de valor. Ambos se tratan como un tipo cadena. Pero hay un formato especial, utilizado por cada uno de esos ejemplos, y es importante validar contra ese formato para garantizar que su aplicación se ejecuta sin problemas y con seguridad.

Desde el punto de vista de seguridad, los formatos tienden a ser más importantes cuando se pasan los valores de PHP a otras aplicaciones, tales como una base de datos o sistemas subyacentes, como el sistema de archivos o correo de transporte.

 

Ejemplos

Las llamadas serían de la siguiente manera, comprobando el tipo de atributo que se pasa.

is_string()
is_int()
is_integer()
is_long()
is_bool()
....

Si el resultado no es valido se enviará un mensaje de error al usuario.

if ( strlen( $year ) != 4 ) exit ( "$year el valor es invalido para un año!" ); 

Para filtrar las mismas y asegurar que no se introduce código malicioso. Utilice las funciones:

  • escapeshellarg() que filtra los argumentos
  • escapeshellcmd() que filtra los comandos no estáticos

Un ejemplo sería el siguiente:

<?php

 $clean = array();
 $shell = array();

/* Filter Input ($command, $argument) */

 $shell['command'] = escapeshellcmd($clean['command']);
 $shell['argument'] = escapeshellarg($clean['argument']);
 $last = exec("{$shell['command']} {$shell['argument']}", $output, $return);

?>

Contenidos relacionados