Glossan

¿Qué es una inyección SQL?

También llamado: SQL injection, SQLi

Definición

La inyección SQL es una vulnerabilidad en la que un atacante introduce código SQL en un formulario o una URL y consigue que la base de datos lo ejecute. Puede servir para robar, modificar o borrar todos los datos.

Ocurre cuando la aplicación construye una consulta SQL pegando directamente lo que escribe el usuario. Si el texto contiene comillas y palabras de SQL, deja de ser un dato y se convierte en parte de la consulta.

Ejemplo

Código vulnerable en PHP:

// ❌ NUNCA: el valor del usuario se pega en la consulta
$sql = "SELECT * FROM usuarios WHERE email = '" . $_POST['email'] . "'";

Si alguien escribe en el campo de email:

' OR '1'='1

La consulta resultante devuelve todos los usuarios:

SELECT * FROM usuarios WHERE email = '' OR '1'='1'

La solución: consultas preparadas

Los datos se envían por separado de la consulta, así que nunca pueden alterarla:

// ✅ Consulta preparada con PDO
$stmt = $pdo->prepare('SELECT * FROM usuarios WHERE email = ?');
$stmt->execute([$_POST['email']]);
$usuario = $stmt->fetch();

Todos los lenguajes y frameworks modernos lo permiten, y los ORM lo hacen por defecto.

Medidas adicionales

Errores habituales

¿Tienes un producto o servicio relacionado con Inyección SQL? Anúnciate en este término.

Términos relacionados

Categorías: Seguridad Backend