SQL Injection (SQLi)
SQLi ocurre cuando una aplicación web permite que el usuario inyecte instrucciones SQL directamente en las consultas que se ejecutan contra la base de datos.
¿Cómo se hace un volcado de base de datos con SQLi?
Si un formulario o parámetro no está protegido, el atacante puede insertar código SQL como:
' OR '1'='1
Y convertir una consulta como:
SELECT * FROM usuarios WHERE usuario = '$input'
en:
SELECT * FROM usuarios WHERE usuario = '' OR '1'='1'
¿Qué puede hacer un atacante?
- Obtener todos los usuarios (dump de base de datos)
- Ver correos, contraseñas, direcciones de clientes y empleados
- Buscar campos como
admin,password,token - Modificar o eliminar datos
- Tomar control del panel de administración
Ejemplo práctico: volcado con UNION SELECT
https://mariscos.com/producto.php?id=1 UNION SELECT nombre, contraseña FROM usuarios
Esto muestra en pantalla nombres y contraseñas si no está protegido.
Exploits avanzados
- Enumerar tablas y columnas usando
information_schema - Usar técnicas de blind SQLi cuando no hay errores visibles
- Escalar a ejecución de comandos si el motor lo permite (MySQL con
LOAD_FILE,INTO OUTFILE)
Prevención
1. Prepared Statements (consultas preparadas)
// PHP con PDO
$stmt = $pdo->prepare("SELECT * FROM usuarios WHERE usuario = ?");
$stmt->execute([$usuario]);
2. Validar y filtrar inputs
No permitas símbolos raros, comillas, comentarios SQL o palabras clave sin filtrar.
3. Minimizar permisos de la base de datos
El usuario de la app NO debe tener acceso a DROP, DELETE global o SELECT sobre todas las tablas.
4. Usa ORM modernos
- SQLAlchemy (Python)
- Prisma (Node)
- Eloquent (Laravel)
¿Qué tipo de datos suelen estar en peligro?
- Datos personales (nombre, email, DNI)
- Contraseñas y hashes
- Direcciones físicas
- Pedidos, compras, historial
- Datos internos de empleados y admins
Un SQLi exitoso puede significar acceso total a todos los sistemas si los mismos credenciales están en varios servicios.
Conclusión
Una web con SQL sin protección es una invitación abierta a ser vaciada. Protege las consultas, valida la entrada, y nunca confíes en los datos del usuario.
← Volver al blog