En esta entrada vamos a explicar un poco sobre seguridad web.
Esta información es para aumentar la seguridad en nuestra web y evitar intrusos, y Dinatur no se hace responsable de que esta información se use con fines malintencionados.
¿Qué es SQL y cómo afecta en la seguridad web?
Es un lenguaje que sirve para modificar o consultar tablas donde se almacenan datos que después se recogen para mostrarlos en nuestra web. Para mejorar la seguridad web, tendremos que aprender unas pautas para evitar que se metan en nuestra base de datos.
¿Qué es la inyección SQL?
Es un método que se usa para aprovechar la vulnerabilidad en la seguridad de muchas webs mediante la introducción de código no deseado en campos de texto y así modificar la misma.
Sentencias básicas:
Toda consulta a una base de datos para recoger información tiene 3 partes básicas:
Ej.: Select * From tabla Where id=1;
Select -> Datos que se van a recoger.
From -> Nombre de tabla.
Where -> condición de la consulta.
Para insertar datos en las tablas:
Ej.: Insert into tabla set campo=’texto’ where id=1;
Insert into-> Nombre de tabla
Set-> donde se ponen los cambios de la tabla ejemplo set id=1;
Where -> condición de la consulta
Y no olvidemos que para comentar las consultas en base de datos existen 2 métodos: añadiendo /* texto a comentar */ donde el texto introducido dentro de los paréntesis quedará como comentarios; y para comentar hasta el final hay que poner – – texto a comentar.
SQL para aumentar la seguridad web: caso práctico
Vamos al tema de seguridad web: empecemos por el campo más vulnerable de la página, el login.
Normalmente tenemos un formulario que recoge el usuario y la contraseña. Vamos a suponer que no tenemos ningún filtro puesto en la sentencia, entonces cuando hacemos una llamada por el login se crearía esta sentencia:
Select * from login where user=’$user’ and password=’$password’;
Parece que todo está bien pero, si añadimos al campo de password ‘ or 1=1
La consulta quedaría así:
Select * from login where user=’$user’ and password=’’ or 1=1 limit 0,1; — a;
Si analizamos la sentencia anterior vemos 2 partes: la primera es user=’$user’ que se supone que intenta entrar con un usuario existente o aleatorio, y la segunda es la que hemos introducido nosotros. Vemos que con la primera escapamos del password y creamos una condición en la que una de las 2 es correcta, password o 1=1 como la segunda siempre será cierta entraremos al usuario directamente.
Como hemos visto en el ejemplo anterior, necesitamos aumentar la seguridad en nuestra web.
Hay muchas formas de jugar con las variables para engañar a las sentencias.
¿Cómo aumentar la seguridad Web?
Aumentar la seguridad Web de nuestra página no es muy difícil, para evitar que nos realicen inyección de SQL, lo único que tenemos que hacer es evitar que se puedan poner caracteres especiales, comillas simples, comillas dobles, /* , — .
Para hacer esto, tenemos que pasar las variables por una función que convierta esos caracteres especiales en no válidos.
Por ejemplo, en MySql : mysql_real_escape_string($variable).
Con algo tan simple, nuestra página ya estará más segura ante la inyección de SQL.
Si tenéis alguna duda o consulta, comentadlo: estamos a vuestra disposición.