AOWS

Just another adrian’s weblog

Inyección SQL: qué es y sus peligros

leave a comment »

Hace tiempo hablé brevemente sobre la inyección SQL y cómo evitarla en ciertos casos concretos con PHP. En este post intentaré profundizar un poco más en este tema y dejar para uno posterior soluciones al problema.

Qué es la inyección SQL

La inyección SQL es una técnica usada para aprovecharse de las entradas que recibe una aplicación, no validadas y utilizadas posteriormente en la construcción de sentencias SQL. Un error muy común a la hora de desarrollar una aplicación web es usar los parámetros proporcionados por el usuario directamente en las consultas, lo que aprovecha el atacante para introducir las modificaciones que necesite para su malicioso cometido. Así, se podría ejecutar cualquier tipo de sentencia SQL en la base de datos valiéndose de estos agujeros de la aplicación o página web.

Como su propio nombre indica, la inyección SQL se da en dicho lenguaje y sobre cualquier plataforma que lo utilice para trabajar contra una BD.

Ejemplo rápido y sencillo

Si tenemos un formulario de búsqueda de usuarios que utiliza la siguiente consulta para conseguir los resultados:

String consulta = "SELECT *
			     FROM usuarios
			     WHERE nombre = '" + texto + "'";

el usuario puede introducir, por ejemplo, pepe, resultando una consulta correcta:

SELECT *
FROM usuarios
WHERE nombre = 'pepe';

Pero, ¿qué ocurre si introduce algo como pepe' OR 'a'='a?

SELECT *
FROM usuarios
WHERE nombre = 'pepe' OR 'a'='a';

Y esta consulta, como vemos, haría que la cláusula del where se cumpla siempre devolviéndonos todos los registros de la tabla.

Peligros principales

  • Confidencialidad: las bases de datos contienen datos importantes y privados, la pérdida de confidencialidad es un problema frecuente en las vulnerabilidades de inyección SQL.
  • Autenticación: si se utilizan sentencias SQL mal construidas para la comprobación de usuario y contraseña, se podría utilizar este agujero de seguridad para loguearnos con cualquier identidad en un sistema.
  • Autorización: como cualquier información almacenada en la base de datos, los permisos y privilegios de un sistema pueden verse afectados por este tipo de ataques.
  • Integridad: las posibles modificaciones y borrados que puede producir un ataque de inyección SQL conllevan un peligro enorme para la integridad de los datos.

Por desgracia, este problema es fácilmente detectable y explotable, por lo que hay que tener un cuidado extremo para evitar a toda costa la inyección SQL. En el próximo post veremos algunas soluciones sencillas y eficaces para varios lenguajes y plataformas.

Written by adrian

26 enero, 2008 a 23:36

Publicado en Posts

Tagged with , ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: