🔌 Endpoint de Consulta Dinámica
/api/v1/etl/query
Ejecuta una consulta SQL de solo lectura y devuelve los resultados serializados.
📦 Payload de la Petición
El endpoint espera un objeto JSON simple con la consulta a ejecutar:🛡️ Filtro de Seguridad (WAF Simulado)
Para evitar inyecciones SQL y la ejecución de sentencias destructivas, el controlador intercepta la consulta cruda y la pasa por una serie de validaciones estrictas antes de enviarla aJdbcTemplate.
🛑 Reglas del Firewall
- Exclusividad de Lectura: La sentencia debe iniciar estrictamente con la palabra clave
SELECT. - Sentencias Únicas: Se prohíbe el apilamiento de múltiples consultas mediante el uso intermedio de punto y coma (
;). - Lista Negra de Palabras Clave: Se escanea el texto mediante expresiones regulares contra comandos peligrosos para neutralizar la manipulación de la estructura o accesos.
🚦 Protección contra Saturación de Red
Como última línea de defensa, la transacción a nivel de base de datos se marca como de solo lectura (@Transactional(readOnly = true)). Además, si la consulta original del usuario omite una cláusula de límite, el servidor inyecta automáticamente un LIMIT 15.
Esto evita la saturación de la red y el colapso de la memoria en el frontend en caso de que se ejecute un SELECT * masivo sobre una tabla con decenas de miles de registros logísticos.