Cómo filtrar y validar datos en PHP usando filter_var

07/06/2024 | PHP, Seguridad | 0 comentarios

Mejora la seguridad de tu aplicación PHP con filter_var: aprende a filtrar, validar y limpiar datos correctamente.


El filtrado, validación y limpieza de datos son aspectos cruciales en el desarrollo de aplicaciones web seguras. En PHP, la función filter_var es una herramienta poderosa que facilita estas tareas.

¿Qué es filter_var?

filter_var es una función de PHP que permite filtrar, validar y sanitizar variables con distintos tipos de filtros predefinidos. Esto ayuda a prevenir la inyección de datos maliciosos y asegura que los datos cumplen con los criterios esperados antes de ser procesados.

La función filter_var tiene la siguiente sintaxis:


filter_var(mixed $variable, int $filter, array|int $options = 0);
  • $variable: La variable a filtrar, validar o sanitizar.
  • $filter: El filtro que se va a aplicar.
  • $options: Opciones que modifican el comportamiento del filtro (Opcional).

Filtros de validación

La validación es el proceso de comprobar si los datos cumplen ciertos requisitos, para ello se tiene los siguientes filtros:

FiltroDescripción
FILTER_VALIDATE_BOOLEANValida si es valor es 0 o 1 (booleano).
FILTER_VALIDATE_EMAILValida una dirección de correo electrónico.
FILTER_VALIDATE_FLOATValida si el valor es un float o decimal.
FILTER_VALIDATE_INTValida un valor como entero.
FILTER_VALIDATE_IPValida si es valor es una dirección IP.
FILTER_VALIDATE_URLValida si su valor es una URL.

Por ejemplo, para comprobar si una variable contiene un correo, podemos hacerlo con:


if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "El correo electrónico no es válido.";
}

Filtros de saneamiento

El saneamiento es el proceso de limpiar los datos, eliminando los caracteres no deseados. Para ello se tiene los siguientes filtros:

FiltroDescripción
FILTER_SANITIZE_EMAILElimina todos los caracteres no permitidos en un email.
FILTER_SANITIZE_NUMBER_FLOATElimina los caracteres no numéricos excepto + y -.
FILTER_SANITIZE_NUMBER_INTElimina todos los caracteres que no sean dígitos.
FILTER_SANITIZE_SPECIAL_CHARSEscapa caracteres HTML ‘»<>& y caracteres.
FILTER_SANITIZE_STRINGElimina todas las etiquetas HTML.
FILTER_SANITIZE_URLElimina todos los caracteres no permitidos en una URL.

Luego, si queremos sanear el comentario enviado por un usuario, se haría mediante:


$comment = '<script>alert("hola");</script>';

echo filter_var($comment, FILTER_SANITIZE_STRING);        // alert(&#34;hola&#34;);
echo filter_var($comment, FILTER_SANITIZE_SPECIAL_CHARS); // &#60;script&#62;alert(&#34;hola&#34;);&#60;/script&#62;

Ejemplo Completo

Supongamos que tenemos un formulario donde se recibe el nombre, correo y teléfono. Lo primero es sanear todos los campos y luego validar cada uno de ellos:


// sanitize params
$name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
$phone = filter_var($_POST['phone'], FILTER_SANITIZE_NUMBER_INT);

// validate params
if (empty($name)) {
    echo "El nombre no es válido.";
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "El correo electrónico no es válido.";
}

if (!filter_var($phone, FILTER_VALIDATE_INT)) {
    echo "El teléfono no es válido.";
}

Conclusión

La función filter_var en PHP es una herramienta versátil y esencial para asegurar que los datos recibidos en una aplicación sean seguros, válidos y limpios. Al utilizar los filtros adecuados, puedes proteger tu aplicación contra diversas vulnerabilidades y asegurar que los datos sean procesados correctamente.

Referencias

Envíar Comentario

En este sitio los comentarios se publican previa aprobación del equipo de Kodetop. Evita los comentarios ofensivos, obscenos o publicitarios. Si deseas publicar código fuente puedes hacerlo entre las etiquedas <pre></pre>