Pentesting

SQL Injection explicada
con ejemplos:
cómo funciona y
cómo prevenirla

2 mayo 2026 · 7 min de lectura Pentesting

SQL Injection lleva en el OWASP Top 10 desde su primera edición en 2003. En 2026 sigue siendo una de las vulnerabilidades más explotadas del mundo. No porque sea difícil de prevenir — sino porque muchos desarrolladores todavía no saben cómo funciona realmente. Este artículo lo explica con código real.

¿Qué es SQL Injection?

SQL Injection (SQLi) es una vulnerabilidad que permite a un atacante interferir en las consultas que una aplicación hace a su base de datos. Ocurre cuando la aplicación incluye datos del usuario directamente en una consulta SQL sin filtrarlos ni validarlos.

El resultado: el atacante puede leer datos que no debería ver, modificarlos, eliminarlos, o en algunos casos ejecutar comandos en el servidor.

Cómo funciona: el ejemplo clásico del login

Imagina un formulario de login. El código PHP que procesa el login podría ser algo así:

$user = $_POST['usuario'];
$pass = $_POST['password'];

$query = "SELECT * FROM usuarios
  WHERE usuario = '$user'
  AND password = '$pass'";

// Si encuentra resultados → login correcto

Si el usuario escribe admin y su contraseña, la consulta queda:

SELECT * FROM usuarios WHERE usuario = 'admin' AND password = '1234'

Hasta aquí todo normal. Ahora viene el ataque. El atacante escribe esto en el campo usuario:

admin' --

La consulta resultante es:

SELECT * FROM usuarios WHERE usuario = 'admin' --' AND password = 'lo que sea'

El -- comenta todo lo que viene después. La condición de contraseña desaparece. El atacante entra como admin sin conocer la contraseña.

Tipos de SQL Injection

In-band SQLi (clásica)

El atacante recibe los resultados directamente en la respuesta de la web. Es la más fácil de explotar y detectar. Incluye la variante Union-based (usa UNION para extraer datos de otras tablas) y Error-based (obtiene información de los mensajes de error del servidor).

Blind SQLi (ciega)

La aplicación no devuelve los datos directamente, pero el atacante puede hacer preguntas de sí/no basándose en el comportamiento de la web (si tarda más en responder, si muestra un resultado u otro). Es más lenta pero igualmente efectiva.

Out-of-band SQLi

El atacante extrae datos a través de un canal diferente (una petición DNS o HTTP a un servidor que controla). Menos común, pero muy difícil de detectar con monitorización básica.

Qué puede hacer un atacante con SQLi

  • Extraer toda la base de datos: usuarios, contraseñas, datos de clientes, tarjetas.
  • Saltarse el login sin conocer ninguna contraseña.
  • Modificar o eliminar datos: pedidos, precios, permisos.
  • En MySQL con permisos de FILE: leer archivos del servidor o escribir webshells.
  • Escalar privilegios dentro del servidor si la DB corre como root.

Cómo prevenirla correctamente

1. Prepared statements (la solución definitiva)

La forma correcta de hacer la consulta del login anterior usando PDO en PHP:

$stmt = $pdo->prepare(
  "SELECT * FROM usuarios
   WHERE usuario = ? AND password = ?"
);

$stmt->execute([$user, $pass]);

// Los parámetros nunca se mezclan con el SQL
// El ataque anterior no funciona

2. Validación y sanitización de entrada

Aunque uses prepared statements, valida siempre el tipo y formato esperado. Un campo de edad solo debería aceptar números. Un email debe tener formato válido. La validación no sustituye a los prepared statements — los complementa.

3. Principio de mínimo privilegio en la base de datos

El usuario de base de datos que usa tu aplicación solo debería tener los permisos estrictamente necesarios. Si solo necesita SELECT e INSERT, no le des DELETE ni DROP. Si el atacante explota un SQLi, el daño queda limitado.

4. No muestres errores SQL al usuario

Los mensajes de error de MySQL contienen información que ayuda al atacante a mapear tu base de datos. En producción, desactiva la visualización de errores y guárdalos en logs del servidor.

¿Quieres saber si tu web es vulnerable a SQLi?

Usamos SQLMap y pruebas manuales para detectar inyecciones en formularios, URLs y cabeceras. Informe con impacto real y código de corrección.

Ver auditoría web →
SQLi en producción es una emergencia

Detectamos y documentamos inyecciones SQL en tu web

Pruebas manuales y automatizadas. Informe con impacto demostrado y código de corrección concreto.

Kodia Asistente
En línea
¡Hola! 👋 Soy el asistente de Kodia. ¿En qué puedo ayudarte?