Lenguaje PHP

Limpiar y validar variables GET y POST en PHP

Limpiar y validar variables GET. Si estás trabajando en un sistema seguramente se han encontrados con formularios que trabajan con métodos GET y POST para manejar la información del sistema o quizá al momento de editar in registro usan el identificador del registro para pasarlo a la URL y mostrar tal registro.

En estos casos es de vital importancia limpiar las variables de posibles inyecciones SQL que pudiéramos ser víctimas y posterior evitarnos dolores de cabeza ante accesos no autorizados en nuestra plataforma.

¿Cuál es la solución para estos problemas?

El método es muy sencillo de aplicar y solo se debe agregar al inicio de nuestros ficheros «.php» que se van a usar en el proceso. Sin embargo, el trabajo conciso de este método es recorrer todos los valores recibidos por GET y POST y limpiarlos de cadenas peligrosas.

Validación y desinfección de datos con filtros

Limpiar y validar la entrada del usuario es una de las tareas más comunes en una aplicación web. Para facilitar esta tarea, PHP proporciona una extensión de filtro nativa que puede utilizar para desinfectar o validar datos como direcciones de correo electrónico, direcciones URL, direcciones IP, números, cadenas de texto, etc.

Para validar los datos utilizando la extensión de filtro es necesario utilizar la función filter_var() de PHP. La sintaxis básica de esta función se puede dar con:

Sintaxis

filter_var(variable, filter, options)

Esta función toma tres parámetros de los cuales los dos últimos son opcionales. El primer parámetro es el valor que se va a filtrar, el segundo parámetro es el identificador del filtro que se va a aplicar y el tercer parámetro es la matriz de opciones relacionadas con el filtro. Veamos cómo funciona.

a) Sanitizar una cadena de texto

En el ejemplo siguiente se desinfectará una cadena quitando todas las etiquetas HTML de ella:

<?php
// Ejemplo de comentario
$comentario = "<h1>Hola! Buenos dias con todos</h1>";

// Desinfectar e imprimir cadena de comentarios
$limpiacomentario= filter_var($comentario , FILTER_SANITIZE_STRING);
echo $limpiacomentario;
?>

La salida del ejemplo anterior se verá algo como esto:

Hola! Buenos dias con todos

b) Limpiar y validar valores enteros

En el ejemplo siguiente se valida si el valor es un entero válido o no.

<?php
// Ejemplo de variable numerica no valida
$novalido = "//25[]";

// Quitamos los caracteres ilegales de la variable
$numero = filter_var($novalido, FILTER_SANITIZE_NUMBER_INT);

// Validamos la variable filtrada
if(filter_var($numero, FILTER_VALIDATE_INT)){
echo "EL $numero ES NUMERO VALIDO";
} else{
echo "EL $numero NO ES NUMERO VALIDO";
}
?>

La salida en el navegador una vez procesara sera:

EL 25 ES NUMERO VALIDO

Lista completa: Filtros de saneamiento

FILTER_SANITIZE_EMAIL.– Elimina todos los caracteres menos letras, dígitos y !#$%&’*+-=?^_`{|}~@.[].

FILTER_SANITIZE_ENCODED.– String URL-encode, opcionalmente elimina o codifica caracteres especiales.

FILTER_SANITIZE_NUMBER_INT.– Elimina todos los caracteres excepto dígitos y los signos de suma y resta.

FILTER_SANITIZE_STRING.- Elimina etiquetas, opcionalmente elimina o codifica caracteres especiales.

Limpiar y validar variables GET y POST en PHP
Limpiar y validar variables GET y POST en PHP

CONCLUSIÓN

En este articulo hemos aprendido a limpiar los métodos POST y GET que son los preferidos por los Hackers para acceder a nuestros sistemas. Además, no solo son para esos métodos, podemos hacerlo con cualquier otra variable.

Con esta simple implementación ya le estamos haciendo la tarea más difícil a los hackers. Sin embargo, podemos limpiar varios entornos como ser: URL, EMAIL, NÚMEROS, CADENAS DE TEXTO, etc.

Espero que esta breve explicación les ayude en sus proyectos web.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

3 comentarios

  1. Una pregunta que incluye el precio que indicas de $9.99, crees que puedas detallarme lo que es?
    (Obvio son dolares cierto?)
    Gracias, recibe un cordial saludo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad