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?

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

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

¿Qué tipo de datos suelen estar en peligro?

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