¿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
- El usuario de la base de datos de la aplicación debe tener solo los permisos que necesita.
- Un WAF bloquea muchos intentos conocidos, pero no sustituye a las consultas preparadas.
- Mantén actualizados el CMS y los plugins: muchas inyecciones SQL explotadas a gran escala están en plugins antiguos.
Errores habituales
- Intentar «limpiar» la entrada quitando comillas a mano: siempre se escapa algún caso.
¿Tienes un producto o servicio relacionado con Inyección SQL? Anúnciate en este término.
Términos relacionados
- SQLSQL es el lenguaje estándar para consultar y modificar datos en bases de datos...
- Base de datosUna base de datos es un sistema que guarda información de forma organizada para...
- WAFUn WAF (Web Application Firewall) es un cortafuegos que analiza el contenido de las...
- XSSUn XSS (Cross-Site Scripting) es una vulnerabilidad que permite a un atacante insertar código...
- PHPPHP es un lenguaje de programación que se ejecuta en el servidor para generar...