SQL es un lenguaje de Backend el cual sirve para interactuar en con una Base de Datos (ej. MySQL). La gran mayoría de webs utilizan bases de datos para almacenar cualquier tipo de dato (imágenes, usuarios, contraseñas…)

Cuando iniciamos sesión en una web, nosotros ingresamos un usuario y contraseña, el cual, normalmente a través de un código PHP conecta a base de datos e inserta o extrae datos.

Esto es un ejemplo de una llamada SQL:

SELECT * FROM usuarios

Pues ya que sabemos esto, podemos aprender como se suelen hackear muchas webs con mucha facilidad.

Las SQL Injections mas básicas son sentencias de código SQL que se insertan en formularios de login de webs para engañar a la llamada SQL. Esto es un ejemplo:

anything' OR 'x'='x

Aclaración! Este tipo de códigos funcionan en webs donde la seguridad no está muy bien trabajada, no son para usarlos en páginas de bancos, empresas grandes etc. Solo webs “básicas”.

Ahora, ¿Cómo ha hecho el código para creerse esta sentencia? Aquí lo verás.

Esto es una sentencia de código SQL donde se está buscando un nombre de usuario o una contraseña almacenada en la base de datos:

SELECT nombres FROM usuarios WHERE '$usuario' (esto es una variable en PHP) = '$_POST['user']';

En esta sentencia, simplemente buscará el nombre que el usuario haya indicado en el formulario.

Entonces, si introducimos el código anterior, quedaría así:

SELECT fieldlist FROM table WHERE field = 'anything' OR 'x'='x';

Resumen, el código está diciendo, “Busca en este sitio, donde “usuario” sea igual a nada, o X es igual a X” En este caso, X es igual a X, por lo tanto, dará la sentencia por válida, y así podrás acceder como si hubieras ingresado un usuario y contraseña correcto.

 

¿Y cómo podemos prevenir este tipo de ataques en nuestras webs?

Pues es muy fácil, aplicando una función de SQL que limpia todo tipo de caracteres especiales (entre ellos las comillas)

mysql_real_escape_string()