Inicio / Base de conocimiento / Glosario / Inyección SQL: qué es y cómo solucionarla

Inyección SQL: qué es y cómo solucionarla

Glosario 4 min de lectura Actualizado: 02.11.2026
Cómo un texto externo se convierte en un comando para la base de datos, qué se puede perder en el proceso y por qué las consultas preparadas resuelven el problema y el escape de cadenas no.

La inyección SQL es una vulnerabilidad en la que el texto que introduce un visitante se incluye en una consulta a la base de datos no como un valor, sino como parte de un comando. Como resultado, una persona externa puede leer, modificar o eliminar lo que no debería tener a su alcance.

Analogía para dueños de sitios web

Imagina un archivo y un formulario: "trae el expediente número ___". Si alguien escribe en el campo del número "...y además llévate todo el archivero y deja la puerta abierta", y el empleado lee todo el formulario como una instrucción, lo hará. La vulnerabilidad no está en el archivo, sino en la costumbre de armar instrucciones con texto ajeno. La solución es un formulario donde el número de expediente siempre siga siendo un número y nunca se lea como un comando.

Qué se puede perder

Qué ocurreA qué lleva
Lectura de tablas ajenasFiltración de las bases de datos de clientes y pedidos, junto con avisos a las personas afectadas y preguntas de los reguladores
Acceso a cuentasHashes de contraseñas de administradores, acceso al panel de administración, control del sitio
Escritura de código ajeno en la base de datosUna infección que vuelve incluso después de limpiar los archivos: consulta código malicioso en el sitio

Cómo afecta al SEO

No es un factor de posicionamiento directo: lo que golpea es la consecuencia. A través de la inyección se suben a la base de datos contenido spam y enlaces ocultos a temáticas ajenas. Luego sigue el escenario típico: los buscadores evalúan mal la temática del sitio, las posiciones caen, algunas páginas salen del índice y, cuando el dominio entra en las bases de sitios inseguros, los navegadores muestran una advertencia y el tráfico baja.

Cómo se ve en el informe de Security Shield

El escáner envía una consulta de prueba inofensiva a los parámetros encontrados y comprueba si el sitio devuelve un mensaje de error de la base de datos. Si lo devuelve, aparece un hallazgo: "SQL Injection Indicator (DB Error)": severidad alta, clase CWE-89, categoría OWASP A03:2021. La evidencia muestra un fragmento del error, y la nota "requiere verificación" significa que el servicio registra un síntoma, no que hackee la base de datos.

La prueba se realiza solo en los modos de pago y en un dominio verificado. El escáner observa desde fuera y solo ve los parámetros que encontró en las páginas: que no haya un hallazgo no significa que no existan inyecciones en ningún lugar. Qué se comprueba exactamente está en el artículo sobre Security Shield.

Severidad alta: significa acción inmediata

Un error de base de datos en la respuesta significa que texto ajeno llegó a la consulta. Pasa al desarrollador la dirección de la página y el nombre del parámetro que aparecen en el informe. El escape manual de comillas y las "listas negras" de palabras no son una solución aquí.

Cómo corregirlo

  1. Consultas parametrizadas. La solución principal: el texto de la consulta se define de antemano y los valores se pasan por separado, como una prepared statement. Así, el contenido del campo no puede convertirse físicamente en parte del comando.
  2. ORM o capa de consultas del framework. Las bibliotecas modernas lo hacen por defecto; los problemas surgen donde la consulta se arma manualmente como una cadena de texto.
  3. Permisos mínimos para el usuario de la base de datos. La cuenta del sitio casi nunca necesita permisos para eliminar tablas ni para trabajar con archivos.
  4. Oculta los errores técnicos a los visitantes: la salida de depuración debe ir a los registros, no a la página.
  5. Actualiza el CMS y las extensiones. En sitios típicos, la inyección suele venir de un plugin vulnerable y no de tu propio código.

Cómo evitar que vuelva a ocurrir

Acuerda con el desarrollador que las consultas armadas concatenando cadenas de texto no pasan la revisión. Un firewall frente al sitio es una medida temporal mientras se corrige, no un reemplazo de las prepared statements. Después de corregir, repite un escaneo profundo. También es útil revisar con la auditoría del sitio: mostrará páginas y enlaces ajenos si algo ya entró en la base de datos.

Preguntas frecuentes

¿Puede ocurrir una inyección SQL si el sitio usa un CMS popular?
Sí, y lo más frecuente es que no provenga del núcleo, sino de un plugin o tema de terceros. Por eso, actualizar las extensiones reduce este riesgo tanto como corregir tu propio código.
¿Ayuda tener un firewall frente al sitio?
Reduce el flujo de intentos y es útil como medida temporal mientras se corrige el problema. La vulnerabilidad sigue ahí, y evadir el filtro suele ser más fácil de lo que parece.
¿Qué se debe hacer primero ante un hallazgo así?
Entrega al desarrollador la dirección de la página y el nombre del parámetro del informe, y pídele que convierta esta consulta en una sentencia preparada. Después de corregirlo, repite el escaneo.
¿Te resultó útil este artículo?
Pruébalo en tu proyecto Todo lo descrito en el artículo está disponible en el panel: el bono de registro ya está en tu saldo.
Abrir panel