« Volver
in asp.net read.

[ASP.NET] Ataques por URL.

En el pasado post vimos una pequeña introducción a la esencia de un ataque XSS (mira el post acá), así que siguiendo con algunos temas de seguridad quiero mostrarles un gran error que se comente cuando trabajamos aplicaciones Web, lo cual claramente se puede convertir en un problema grande de seguridad. Creo que todos conocemos que por medio de la URL de una página podemos enviar valores a otra página, y esto claramente es muy sencillo, por ejemplo, si quisiéramos ver el detalle de un producto con un determinado código podemos tener una URL parecida a la siguiente:

Con lo cual le estaríamos diciendo al sistema que el producto del cual deseamos ver el detalle es aquel cuyo id es el 50, lo cual no esta mal, sin embargo acá ya podemos mencionar algunos posible problemas: - La manipulación de la URL queda 100% del lado del usuario - El usuario visualiza datos sensibles de la aplicación Ahora, si comentamos más en detalle los dos puntos anteriores, podemos decir que en el segundo caso debemos ser demasiado cuidadosos con los datos que enviamos por URL, NUNCA debemos enviar datos sensibles como claves, números de tarjetas o demás información privada, y en el primer punto el rollo radica en que el usuario puede colocar lo que desee en la URL.. bueno y esto que problema tiene?? Como ejemplo, digamos que en la página tenemos un método llamado CargarInformacionProducto, el cual realiza una consulta a nuestra base de datos en busca de los datos del producto teniendo como filtro el id del producto, si ese es que vemos en la URL, entonces suponga que (y debería ser) el id del producto es de tipo int, con lo cual convertimos el valor de la variable idProducto a int, una forma podría ser: >
1: int idProducto = Convert.ToInt32(Request.QueryString["idProducto"]); > >

Sencillo no? claro que si, pero bueno, ahora suponga que nuestro querido usuario que no tiene nada que hacer va a la URL y la deja algo así:

Que!!! Si así como lo ves, ahora vamos a buscar el id del producto cuyo valor es FelizNavidad, entonces al ejecutar la misma instrucción de convertir a int (creo que ya sabrán que va a botar error) vamos a tener el siguiente error:

Imagen1

El cual se da simplemente porque no es posible convertir FelizNavidad a un dato numérico… y bueno si nuestro querido usuario sigue cambiando la URL y ahora elimina todos los parámetros que tiene?? es decir deja solo la parte de producto.aspx entonces volvemos a tener problemas, ya que cuando intentamos acceder a una variable no es posible, claro ya que no esta en la URL, y puede que no se genere error pero nuestra aplicación tampoco va a funcionar de la mejor manera.

Bueno ustedes podrán decir que hasta el momento los ataques no han tenido un problema serio, y es verdad, pero que pasaría si tenemos una URL como:

En ese caso estaríamos eliminado el producto con id igual a 50, y en ese caso modificando el valor de idProducto nos podrían estar borrando TODOS nuestros productos, lo cual les aseguro si seria un problema…o no?? Y eso no es todo, también nos podrían incluir código JavaScript en la URL!!

En resumen, debemos tener mucho cuidado al manejar variables por QueryString (si no sabes que es QueryString mira este post), y algunas puntos que podemos tener presente son:

  • No mostrar información sensible.
  • Validar que la variable existe.
  • Validar el tipo de dato de la variable.
  • No realizar operaciones directamente, aplica para el ejemplo de la página eliminarProducto.
  • Encriptar los valores que pasamos (me gusta hacerlo siempre).

Y hasta acá llegamos, ha sido un post corto, de un tema que ya todos conocemos, pero que algunas veces pasamos de largo.

Hasta la próxima!

comments powered by Disqus