Saltar al contenido

Inyección SQL

La inyección SQL aparece cuando datos externos cambian la estructura de una consulta. La vinculación de parámetros protege los valores, no los permisos de acceso.

Seguridad informática

La inyección SQL consiste en introducir fragmentos de instrucciones SQL mediante datos que procesa una aplicación. Si esos valores se incorporan al texto de una consulta, pueden cambiar su significado. Los datos que se pueden leer o modificar dependen, entre otros factores, de los permisos de la cuenta de base de datos utilizada.

Separar el filtro de proyecto y la estructura de consulta

Un portal de incidencias ficticio busca registros asociados a una referencia de proyecto. Trata el valor del campo projectRef como un parámetro vinculado: la estructura de la consulta es fija y el valor se transmite por separado mediante la interfaz de base de datos. Debe seguir siendo un valor de búsqueda y no convertirse en sintaxis SQL.

Preparar una consulta después de haberla compuesto con entradas no establece por sí solo esa separación. Tampoco los datos guardados antes o los valores de otros sistemas deben convertirse sin control en texto SQL al construir una consulta posterior.

Vincular valores y fijar las decisiones de estructura

Un campo de ordenación como sortKey es otro caso. Los marcadores para valores de datos no sustituyen nombres arbitrarios de columnas ni direcciones de ordenación. Por ello, la aplicación asocia las selecciones conocidas con columnas y direcciones fijas definidas en el código. OWASP describe expresamente esta distinción entre vincular parámetros y permitir decisiones estructurales.

Vincular parámetros tampoco comprueba si la persona que ha iniciado sesión puede acceder al proyecto solicitado. Esa autorización sigue siendo responsabilidad de la aplicación. Una cuenta de base de datos limitada a los permisos necesarios puede reducir los posibles daños; no elimina la construcción insegura de consultas.

Fuentes