You are on page 1of 3

SQL Injection en SQL Server

Muchos programadores no tienen en cuenta el potencial peligro que supone no validar las cadenas que el usuario nos enva a la Web, estas se pueden convertir en ataques que podran arruinar nuestro sistema. Como ya comentamos en el previo del artculo, los formularios sin validacin se convierten en un fcil objetivo de ataque de SQL Injection. Vamos a comenzar por el principio.
Qu es SQL Injection?

SQL Injection (Inyeccin SQL) es una vulnerabilidad informtica a nivel de base de datos de una aplicacin. Esta vulnerabilidad se hace presente en el filtrado incorrecto de las variables utilizadas en partes del programa que usan sentencias SQL. De hecho ms que vulnerabilidad es un error que puede ocurrir en cualquier lenguaje de programacin o de script que est incrustado dentro de otro. Sin embargo la Inyeccin SQL no siempre surte efecto, ya que para ello, el sistema de base de datos debe de permitir la concatenacin de consultas. Aunque existen maneras de realizar Injection sin concatenar consultas, ests suelen ser las ms utilizadas. Por defecto, sabemos que SQL Server permita dicha opcin, y bases de datos como MySQL o Access, no estn habilitadas por defecto, as que sabiendo esto una buena manera de evitarlo sera desactivar dicha opcin.
Un ejemplo practico de SQL Injection

Un cdigo 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. Ya que el programa se sirve de campos introducidos por el usuario para lograr la consulta SQL final que extraer la informacin del usuario. Por ejemplo, esta sera una consulta normal de extraccin de datos para una validacin:
"Select * From Usuarios Where usuario='" & Request.Form("usuario") & "' And password='" & Request.Form("password") & "';"

Esta sera una consulta normal y corriente donde se extraeran todos los datos del usuario y contrasea tecleado, pero que pasara si el usuario consultante escribiese esto en los campos:
Usuario --> admin' Or true ''

Contrasea --> admin' Or true ''

Simplemente la cadena final quedara as:


Select * From Usuarios Where usuario='admin' Or true '' And password='admin' Or true '';

Peligroso verdad?, esta cadena dara acceso al primer usuario de la base de datos o al usuario admin de la aplicacin, ahora imaginemos que el sistema admite concatenacin de consultas, el usuario podra emitir esta consulta tan solo escribiendo en el campo Contrasea del formulario:
Usuario --> admin

Contrasea --> admin'; Drop Table usuarios; Select * From articulos Where titulo like '%

El resultado final sera este:

Select * From Usuarios Where usuario='admin' And password='admin'; Drop Table usuarios; Select * From articulos Where titulo like '%'

Impresionante-mente desastrosos para nuestro sistema si no tenemos salvaguarda de nuestros datos.


Cmo puedo evitar estas tcnicas?

Estas tcnicas son ms fciles de evitar de lo que parece en un principio, con tener en cuenta un par de acciones ya dificultaremos en gran medida la inyeccin SQL. Aqu explicaremos la manera de evitarlo en ASP, cuando el formulario es devuelto, antes de pasar la instruccin, aplicamos un simple reemplazo.
Replace(Request.Form("usuario"), "'", "''")

Lo ideal es que creemos una funcin que nos reemplaza los caracteres no deseados, como podran ser la comilla simple, el punto y coma, los guiones simples juntos (--), etc. Otra tcnica 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 asignis permisos de eliminacin a un usuario que tan solo tiene que hacer consultas, es un riesgo innecesario. La tcnica de SQL Injection no solo est vigente en formularios, hemos de recordar que tambin las URL pasan parmetros para que estos consulten la base de datos, una consulta como "default.asp?id=1" podra convertirse en el objetivo de ataque..

You might also like