Cargando



ASP.NET MVC - SQL Injection

En este tutorial vamos a ver cómo funciona el SQL Injection y cómo prevenirlo.


jul 19 2014 23:05
Avanzado
jul 21 2014 13:14
Existen muchos tipos de ataques que podemos recibir en nuestras aplicaciones, uno de los más comunes y que puede generar una gran cantidad de daño es el SQL Injection, este ataque consiste en encontrar vulnerabilidades en la forma en la que manejamos las consultas contra base de datos para extraer información o insertar valores que puedan afectar la funcionalidad de la misma.

Para poder protegernos contra este tipo de ataques primero debemos conocer en consiste, de esta forma podremos aprender que tipo de precauciones debemos tomar.

SQL Injection


Como mencionamos este ataque hace que nuestra base de datos no funcione de manera adecuada, para ello el atacante introduce datos que hacen que nuestras consultas fallen de acuerdo a ciertas vulnerabilidades, con ello el atacante puede intentar obtener los esquemas de nuestras tablas o ingresar datos que puedan comprometer el funcionamiento, como por ejemplo ingresar un usuario para acceder a la sección administrativa de nuestra aplicación.

Una de las formas más comunes, es que ingresemos parámetros directamente como los recibimos desde los controladores, por ejemplo tenemos una búsqueda por categorías y recibimos del controlador el identificador de una categoría a buscar, si esta pasa directamente sin limpiarse puede generar un ataque que le muestre al atacante todas las categorías existentes.

Veamos el siguiente código inseguro:


Podemos ver como en la línea 6 construimos la condición de la búsqueda y luego en la línea 10 la pasamos directamente al método que arma la consulta, un ojo de poca experiencia quizás no ve ningún problema, pero si un atacante ingresa el siguiente parámetro: “1 or 1=1” podría obtener el listado de toda nuestra tabla.

¿Cómo protegernos?
La forma para protegernos en este caso, pasa por dos pasos básicos, el primero es que no podemos dejar que se ejecuten datos directamente como los recibimos, para ello antes de la consulta debemos limpiar el parámetro con un método que busque por caracteres ilegales y en caso de encontrarlos enviar al usuario a una página de 404 o página no encontrada.


Veamos en el siguiente código como podemos filtrar lo que recibimos:


asp_sqlinjection2.jpg


Aquí revisamos con una expresión regular que solo sean números lo que recibe nuestro controlador, en caso contrario enviamos un mensaje, cada quien puede hacer su versión, pero lo importante está en controlar lo que va a recibir nuestra aplicación.

El segundo paso para evitar los ataques es no trabajar con el comodín “*” y siempre limitar las consultas cuando esperamos un registro, de esta forma evitamos exponer todos los datos en caso que alguien logre superar nuestras previsiones.

Capturar excepciones
Por último, si un parámetro ilegal llega a entrar en nuestra aplicación, debemos evitar a toda costa que salga una traza del error, ya que esta posee datos sensibles de nuestra instalación y pueden ser utilizados en nuestra contra, por ello siempre debemos asegurarnos de capturar las excepciones y enviar un mensaje personalizado que no de muchos detalles, ya que estos detalles los podremos ver en el ambiente de desarrollo.


Como pudimos ver conocer los ataques nos da una perspectiva diferente de cómo podemos proteger nuestra aplicación y cómo hacer para darle más seguridad a nuestros usuarios.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X