miércoles, 28 de enero de 2009

¿Qué es SQL Injection?

SQL Injection (Inyección SQL) es una vulnerabilidad informática a nivel de base de datos de una aplicación. Esta vulnerabilidad se hace presente en el filtrado incorrecto de las variables utilizadas en partes del programa que usan sentencias SQL. De hecho más que vulnerabilidad es un error que puede ocurrir en cualquier lenguaje de programación o de script que esté incrustado dentro de otro.

Sin embargo la Inyección SQL no siempre surte efecto, ya que para ello, el sistema de base de datos debe de permitir la concatenación de consultas. Aunque existen maneras de realizar Injection sin concatenar consultas, estás suelen ser las más utilizadas. Por defecto, sabemos que SQL Server permita dicha opción, y bases de datos como MySQL o Access, no están habilitadas por defecto, así que sabiendo esto una buena manera de evitarlo sería desactivar dicha opción.

Un código que se repetirá en miles de sitios Web es el de validaciones de usuario con su correspondiente formulario de login. Este siempre ha sido un foco de ataque vulnerable para las aplicaciones mal protegidas. Lo ideal es que creemos una función que nos reemplaza los caracteres no deseados, como podrían ser la comilla simple, el punto y coma, los guiones simples juntos (--), etc.

Otra técnica para asegurarnos un buen funcionamiento sin ataques es la de asignar los permisos correctos al usuario que manejará la base de datos en Internet, nunca asignéis permisos de eliminación a un usuario que tan solo tiene que hacer consultas, es un riesgo innecesario. La técnica de SQL Injection no solo está vigente en formularios, hemos de recordar que también las URL pasan parámetros para que estos consulten la base de datos, una consulta como "default.asp?id=1" podría convertirse en el objetivo de ataque.

2 comentarios:

Anónimo dijo...

Para los logins de mis aplicaciones, yo simplemente guardo encriptada la contraseña, o sea que cuando el usuario envia desde el form, aplico un simple algoritmo al user/pass y chau caracteres raros, y posibles concatenacion de consultas y/o comillas simples que vengan.
y con los formularios? simple, utilizo el DreamWeaver como IDE y a cada update y o insert me genera codigo libre de errores.

Saludos

Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.