Para empezarSi no entiendes cómo una aplicación habla con su base de datos, jamás vas a poder protegerla... ni encontrar sus fallos.
El corazón de cualquier app
Prácticamente cualquier aplicación web moderna, desde una red social hasta el sistema de un banco, depende de una base de datos para funcionar. Si la base cae, el servicio muere. Si la base es vulnerable, toda la empresa queda expuesta al completo.
¿Qué es una Base de Datos?
Una base de datos es un sistema estructurado diseñado para almacenar, organizar y permitir la recuperación rápida de grandes volúmenes de información de forma electrónica. En ciberseguridad, es el objetivo principal de la mayoría de ataques dirigidos a robar información confidencial.
Modelo Relacional (RDBMS)
Los Sistemas de Gestión de Bases de Datos Relacionales organizan la información en tablas formadas por filas (registros) y columnas (campos). Estas tablas se relacionan entre sí mediante claves, creando una red lógica de datos perfectamente estructurada.
Anatomía de una tabla SQL
Para entender cómo se estructuran los datos, debemos descomponer una tabla relacional en sus elementos fundamentales y entender qué papel juega cada uno dentro del sistema.
Marca cada paso al entenderlo · 0/4
¿Qué es SQL?
SQL o Structured Query Language es el lenguaje estándar utilizado para comunicarse con las bases de datos relacionales. Permite realizar consultas, insertar registros, actualizar información y modificar la estructura de los datos con comandos muy precisos.
Conectando al motor SQL
El primer paso para interactuar con una base de datos desde la línea de comandos en un entorno de laboratorio es autenticarnos contra el servidor gestor utilizando credenciales válidas.
$ mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.32-0ubuntu0.22.04.2
Listando las bases de datos
Una vez dentro del gestor, el comando SHOW DATabases nos muestra todas las bases de datos disponibles en el servidor, permitiéndonos identificar cuál es nuestro objetivo de estudio.
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
Seleccionando la base de datos
Para operar dentro de una base de datos específica y consultar sus tablas internas, debemos seleccionarla explícitamente utilizando la sentencia USE.
mysql> USE bitcrack_shop;
Reading table information for completion of table and column names
Database changed
Consultando tablas
El comando SHOW TABLES nos revela qué estructuras de datos aloja la base de datos seleccionada, ayudándonos a encontrar tablas críticas como usuarios, contraseñas o pedidos.
mysql> SHOW TABLES;
+-------------------------+
| Tables_in_bitcrack_shop |
+-------------------------+
| products |
| users |
La sentencia SELECT básica
La operación más común y potente en SQL es SELECT. Nos permite extraer información de una o varias columnas especificadas dentro de una tabla concreta.
mysql> SELECT username, email FROM users;
+----------+-------------------+
| username | email |
+----------+-------------------+
| admin | [email protected] |
| alice | [email protected] |
Filtrando con la cláusula WHERE
Rara vez queremos ver toda la tabla. La cláusula WHERE nos permite aplicar condiciones estrictas para recuperar únicamente los registros que coincidan con nuestros criterios de búsqueda.
mysql> SELECT * FROM users WHERE id = 1;
+----+----------+------------------+----------+
| id | username | email | role |
+----+----------+------------------+----------+
| id | admin | admin@bitcrack | superuser|
+----+----------+------------------+----------+
Modificando registros con UPDATE
El lenguaje SQL también permite alterar los datos existentes. La sentencia UPDATE modifica los valores de los campos que cumplan con la condición establecida en el filtro.
mysql> UPDATE users SET role='admin' WHERE username='alice';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Inyección SQL (SQLi) a vista de pájaro
Una inyección SQL ocurre cuando una aplicación web toma entradas de usuario sin validar y las concatena directamente dentro de una consulta SQL, permitiendo al atacante manipular la lógica interna de la base de datos.
El peligro de la concatenación
Nunca confíes en el input del usuario. Construir consultas SQL mediante concatenación directa de cadenas de texto es el error de desarrollo más clásico y peligroso que abre la puerta a la extracción masiva de datos.
Cómo prevenir ataques SQL
Para blindar una aplicación frente a manipulaciones maliciosas de bases de datos, los desarrolladores deben aplicar estrictas medidas de defensa en profundidad.
¿Te acuerdas? Toca para comprobarlo
Atajos: ← → para cambiar de pieza · / para buscar
