Menu

Sanear datos con PHP

Octubre 9, 2010 - PHP

Introducción

Existen reglas de oro en el mundo del desarrollo de software y una de ellas es “Nunca confíes en lo que envía el usuario”, ya que si no lo hacemos corremos el riesgo de que con intenciones o no pueda atacarnos, mediante XSS o SQL Injection.

Imaginémonos la siguiente situación: tenemos un formulario de ingreso de usuario con dos campos Nombre y contraseña. Un usuario llamado “name’; DROP TABLE Users;–” (Que nombre mas extraño no?) llena nuestro formulario, veamos lo que sucede:

Nuestra sentencia de consulta es:

SELECT * FROM Users WHERE Name = ‘$_POST[“name”]’;

Cuando nuestro usuario con nombre raro ingresa su nombre, la sentencia queda:

BOOM!!!!, solo con esto nuestra tabla de usuarios ha sido borrada si ademas no se le ha dado acceso a la aplicación con un usuario restringido.

Solución

La solución viene a nosotros con una función PHP llamada filter_vars la cual nos ayuda a sanear datos de forma muy sencilla, su sintaxis es la siguiente:


filter_var ( $variable [, int $filter = FILTER_DEFAULT [, $options ]] )

$variable: Es obviamente la variable que vamos a sanear.

$filter: El tipo de filtro que vamos a aplicar a la variable, para un listado completo de los tipos de filtros puedes visitar el siguiente link.

$options: Es un array asociativo de opciones si el filtro acepta este tipo de argumentos.

Ejemplo:

$var = "<p>Hola desde mi blog!</p>";
filter_var($var, FILTER_SANITIZE_STRING);
//Resultado Hola desde mi blog sin las etiquetas

Conclusión

El saneado de datos es fundamental e indispensable en nuestras aplicaciones, de ellos depende la seguridad de nuestra aplicación y evitarnos dolores de cabeza con usuarios con nombres tan creativos como el que vimos en el post.

2 pensamientos sobre “Sanear datos con PHP

XD VENENO

es mejor usar el venenito
htmlspecialchars(trim($_POST[‘nombre’]));

Query ————-

mysql_real_escape_string($nombre),

Respuesta
Eduardo

Efectivamente antes de la llegada de PHP 5.3 las formas de sanear datos en PHP eran con esas funciones htmlspecialchars para evitar ataques XSS y mysql_real_escape para evitar SQL Injection.

Gracias por comentar jasser!

Respuesta

Deja un comentario

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