Archive for the ‘ Base de datos ’ Category

Protege tu aplicación contra SQL Injection

En este primer aporte escribiré sobre una vulnerabilidad que pueden presentar las aplicaciones creadas en cualquier lenguaje y si estas dando tus primeros pasos en programación y utilizando base de datos, este es un importante tema a tener en cuenta para tus futuras aplicaciones.

¿Qué es SQL Injection?

SQL Injection es la vulnerabilidad que presenta una aplicación cuando permite filtrar código SQL desde sus campos de entradas,  como por ejemplo un campo de texto de un formulario HTML o modificando los valores de variables a través del método GET.  Al suceder esto y realizar alguna consulta en la base de datos utilizando estos datos de entrada se pueden comprometer los datos a nivel de base de datos y su integridad.

Uno de los casos más comunes de este tipo de ataques es cuando el atacante desea acceder a un sistema que requiere un nombre de usuario y contraseña.  Estos atacantes pueden emplear distintas técnicas de SQL Injection para quebrantar la seguridad y obtener acceso.

Veamos un sencillo ejemplo en PHP de como un usuario puede inyectar código SQL en los campos de texto de una pantalla de  acceso a un sistema. Suponiendo que el sistema utiliza el siguiente script para buscar el usuario en la base de datos:

$sql = "SELECT *
	FROM usuario
	WHERE usuario = '".$usuario."'
	AND contrasenia = '".$contrasenia"'";

Y el usuario coloca el siguiente código en cualquiera de los campos de entrada de texto en el formulario de usuario y contraseña:

' or '1'='1'

Se generaría la siguiente sentencia SQL para consultar la base de datos:

$sql = "SELECT *
	FROM users
	WHERE usuario = '".$usuario."'
	AND contrasenia = '' or '1'='1';

La primera parte de la sentencia compara los dos primeros datos contra sus respectivos campos en la base de datos y la segunda parte compara si 1 = 1, lo retornaría verdadero aún si los datos de usuario y contraseña son válidos.

¿Cómo evitar ataques de este tipo en nuestra aplicación?

Aunque existen varias formas de proteger nuestras aplicaciones de este tipo de ataques, recomiendo las siguientes:

  • Verifica que el usuario de base de datos de tu aplicación no tiene privilegios para eliminar tablas con la sentencia SQL “DROP”.
  • Verifica toda la información que venga del usuario en busca de comillas (”) o sentencias que puedan afectar la consulta en base de datos.
  • Utiliza herramientas automatizadas como SQL Inject ME.

Por: Psycho.

Anuncios
Anuncios
A %d blogueros les gusta esto: