miércoles, 25 de enero de 2012

SQL Inyection for dummies

Introduccion a la inyeccion SQL

Las paginas o sitios que necesitan de alguna manera almacenar informacion, ya sea de sus contenidos, usuarios, o estadisticas, lo hacen a traves de lo que llamamos Bases de Datos, en si una Base de Datos es un termino muy generico para definir donde se guarda la informacion, en terminos mas especificos y fisicos deberiamos hablar de Sistemas de Gestion de Bases de Datos (SGBD).
Hoy en dia existen varios tipos de bases de datos: SQL,NoSql,orientadas a Objetos,etc.

Por ahora hablaremos de las bases de datos SQL. Dentro de los SGBD del tipo SQL mas conocidos o usados esta MySQL el cual hoy en dia es propiedad de Oracle pero tiene su origen en el mundo del OpenSource, tenemos MSSQL Server del cual es propietario Microsoft, Firebird el cual es un descendiente digamoslo asi del antiguo Interbase de Borland, aquella empresa que creo los famosos Turbo C y Turbo Pascal ampliamente conocidos en el mundo de la programacion, PostgreSQL, SQLite, etc.

Pues bien, estos SGBD, tienen un dialecto o un lenguaje con el cual se puede recuperar la informacion que almacenan el cual es llamado SQL o Structured Query Language (Lenguaje de Consulta Estructurado).

Este lenguaje es el que se utiliza por desarrolladores y administradores de bases de datos para añadir, consultar y modificar informacion en los servidores y en las paginas web.

Bien, ahora donde entra la parte de la inyeccion de SQL, cuando se desarrolla un sitio, o cualquier programa informatico que interactua con Bases de datos, se corre el riesgo de permitir que se capture o introduzca informacion que el dialecto sql interprete de una manera que no sea la correcta o que permita omitir o introducir instrucciones que modifiquen la informacion que esta guardada dentro del servidor.

Es aqui cuando los "hackers" (pongo entre comillas ya que ciertamente el termino hacker tiene un significado no tan destructivo), aprovechan estas vulnerabilidades, y ya sea en la pagina o sistema informatico, deliberadamente introducen sentencias o instrucciones, o caracteres especiales donde se permite la entrada de informacion, o mediante software que modifica el envio de la informacion del ciente al servidor,   y el servidor al recibir esa instruccion modificada, puede ejecutarla con resultados que pueden ser desde consultar informacion la cual no estaba planeada mostrarse con el flujo normal del sitio, o bien incluso borrar la informacion, o la base de datos en si.

¿Por que ocurre esto o por que se permite?, entre las causas pueden ser, un mal desarrollo por parte del programador que no siguio buenas practicas de programacion y permite un acceso directo desde el sistema hasta la base de datos, o bien que el propio SGBD tenga vulnerabilidades y permita ejecutar codigo no deseado y lograr los efectos antes mencionados.

¿Que podemos hacer para prevenir esto.?
La primera opcion es tener el software siempre actualizado, instalando las correcciones o "fixes" que la compañia nos provee, tratar de tener siempre la version mas reciente del software para manejo de la informacion, y por ultimo pero tambien muy importante, que todos aquellos que nos dedicamos al desarrollo y la programacion, estemos preparados y sepamos implementar correctamente el codigo que nos permita proteger el acceso a la informacion desde su captura en el lado del cliente.

En si esto es solo una introduccion o explicacion a lo que es SQL Inyection, en internet hay mucha  informacion disponible para poder resolver y prevenir esto, asi que quien guste o tenga que realizar un desarrollo puede investigar y documentarse para prevenir algun suceso no deseado y proteger la informacion.