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).
Comentarios