Skip to content

Una revisión de código muestra una consulta SQL construida concatenando la entrada del usuario. ¿Cuál es la corrección correcta?

Respuesta breve

Las consultas parametrizadas son la verdadera corrección: separan el código de los datos, de modo que la entrada del usuario siempre se trata como un valor, nunca como SQL capaz de cambiar la estructura de la consulta. El escape manual es propenso a errores y evitable según codificaciones y dialectos. Un WAF es un control compensatorio, no una solución, y los trucos de codificación lo burlan. Una comprobación de longitud no detiene la inyección. Corrígelo en la capa de la consulta.

Una consulta ensamblada con concatenación de cadenas permite que un texto controlado por el atacante pase a formar parte del SQL que la base de datos analiza. La causa raíz es que el código y los datos se mezclan en la misma cadena. Cualquier corrección que no los separe solo trata los síntomas.

Por qué las consultas parametrizadas son la solución

Con una sentencia preparada, el texto SQL con marcadores de posición se envía primero a la base de datos y se compila; los valores del usuario se envían por separado y se enlazan a esos marcadores. El analizador ya ha decidido la estructura de la consulta antes de ver la entrada, así que un valor como ' OR 1=1-- solo puede ser una cadena literal — nunca nueva sintaxis SQL. Es estructural, no un filtro que haya que ajustar continuamente, y por eso es la recomendación canónica de OWASP.

Por qué fallan las demás opciones

  • Escapar las comillas con una expresión regular intenta neutralizar a mano los caracteres peligrosos. Se rompe con codificaciones alternativas, Unicode, contextos numéricos sin comillas y las sutiles diferencias de escape entre MySQL, PostgreSQL y otros. Un solo contexto omitido reabre el agujero.
  • Añadir una regla de WAF y dejar el código tal cual es un control compensatorio, útil como defensa en profundidad, pero compara patrones de tráfico y se evita habitualmente con comentarios, cambios de mayúsculas y codificación. El código vulnerable se publica igual.
  • Un límite de 100 caracteres no sirve de nada: ' OR 1=1-- y la mayoría de las cargas de exfiltración caben holgadamente bajo cualquier límite razonable.

Qué evalúa el entrevistador

Quiere ver que corriges la clase de fallo en la capa adecuada en lugar de recurrir a un filtro o a un dispositivo. Una buena respuesta nombra primero la parametrización, trata la validación de entradas y el WAF como capas adicionales (nunca la solución) y conoce el caso límite: las variables de enlace no pueden parametrizar identificadores como nombres de tabla o columna, por lo que los elementos de esquema dinámicos deben validarse contra una lista de permitidos estricta.

Posibles preguntas de seguimiento

  • ¿Cómo impiden realmente las consultas parametrizadas que el analizador trate la entrada como código?
  • ¿Dónde NO ayudan las sentencias preparadas — por ejemplo, con nombres de tabla o columna dinámicos?
  • ¿Cómo desplegarías esta corrección de forma segura en una gran base de código heredada?

Fuentes

Consigue 100 preguntas de entrevista de ciberseguridad + respuestas

Déjanos tu correo y te enviaremos el pack en PDF gratuito y el mazo de flashcards.

Sin spam. Cancela tu suscripción cuando quieras.