Uso de SQL en Aplicaciones Web — Conceptos esenciales para SQL Injection
🌐 Uso de SQL en Aplicaciones Web
Las aplicaciones web se conectan a bases de datos (como MySQL) para almacenar y obtener datos.
En PHP, una consulta típica se ve así:
$conn = new mysqli("localhost", "root", "password", "users");
$query = "select * from logins";
$result = $conn->query($query);
Para mostrar los resultados:
while($row = $result->fetch_assoc()){
echo $row["name"]."<br>";
}
Cuando se usa entrada del usuario en una consulta:
$searchInput = $_POST['findUser'];
$query = "select * from logins where username like '%$searchInput'";
$result = $conn->query($query);
Si la entrada no se valida → hay posibilidad de SQL Injection.
🧪 ¿Qué es una Inyección?
La inyección ocurre cuando la aplicación interpreta la entrada del usuario como código, rompiendo la estructura original.
La desinfección consiste en eliminar o escapar caracteres peligrosos (' " ; etc.).
💥 Inyección SQL
Ocurre cuando el usuario puede insertar código SQL en la consulta final.
Ejemplo vulnerable:
$searchInput = $_POST['findUser'];
$query = "select * from logins where username like '%$searchInput'";
Consulta final:
select * from logins where username like '%$searchInput'
Si escribimos:
admin
Queda:
'%admin'
Pero si escribimos esto:
1'; DROP TABLE users;
La consulta generada sería:
select * from logins where username like '%1'; DROP TABLE users;'
Esto rompe la consulta original y ejecuta comandos SQL maliciosos.
Nota: MySQL no permite múltiples consultas con ;, aunque MSSQL y PostgreSQL sí.
❗ Errores de Sintaxis
La inyección anterior fallaría:
Error: near line 1: near "'": syntax error
El error ocurre porque la última comilla ' queda sin cerrar:
select * from logins where username like '%1'; DROP TABLE users;'
Para inyectar correctamente, hay que producir una consulta válida.
Como no vemos el código fuente, usamos técnicas como comentarios o manipulación de comillas.
🧭 Tipos de Inyecciones SQL

🎯 In-Band SQL Injection
Salida visible directamente en el frontend.
🔹 Union-Based
Usa UNION para fusionar resultados de otra consulta.
🔹 Error-Based
Fuerza errores SQL o PHP para obtener información.
👁️ Blind SQL Injection
Salida no visible directamente.
🔹 Boolean-Based
La página cambia según verdadero/falso.
🔹 Time-Based
Usa retrasos con funciones como:
SLEEP(5)
📡 Out-of-Band SQL Injection
La salida se envía a otro canal (DNS, HTTP externo).