martes, 25 de agosto de 2009

SQL Injection

Un gran porcentaje de los Web Sites que se encuentran en Internet son vulnerables a los ataques de SQL Injections, especialmente aquellos que tienen algunos años de desarrollados. Muchos Sitios Web desarrollados bajo ASP 3.0, PHP, Perl y Java que tienen forman las sentencias SQL mediante string que son ejecutadas directamente desde el web site a la base de datos son muy propensa al este tipo de ataque. Ahora veamos un ejemplo:

var = "select count(*) from users where username = ' " + username +" ' and password = ' " + pass + " ' ";

ese mismo código puede ser interceptado ya sea cambiando un campo hidden o una variable por querystring de esta forma:

var = "select * from users where username = ' " + username +" ' or 1 = 1 and password = ' " + pass + " ' or 1 = 1";

De esta forma es posible se puede conseguir las cuentas de usuarios con todos los privilegios, y podemos seguir hasta pasar un query en la sentencia con algunas tablas del sistemas con las cuentas de usuarios. Algunos métodos para protegerse de este tipo de ataques son:
  • Una forma de prevenir esto es utilizando procedimientos almacenados que reciban parámetros cerrados (con longitud definida, si es posible encriptado).
  • No pasando variables importantes por querystring (si es posible cambiar las variables a tipo Guid que puedan ser cambiada en la plataforma).
  • En .Net podemos usar los SqlCommand para crear nuestras consultas y asignar parámetros que reciban el valor de forma indirecta mediante la clase parameters.
  • No utilizar cuentas con privilegios administrativos (muy importante).
  • No Proporcionar mayor información de la necesaria.
  • Cuidado con las sentencias que utilicen UNION (muy utilizado en los injectios, al unir un query con una sentencia que llame los registros de alguna tabla de sistema).

No hay comentarios: