¿Cómo analiza CodeQL el código?
Para implementar el examen de código con CodeQL, es necesario saber cómo la herramienta analiza el código.
El análisis de CodeQL consiste en tres pasos:
- Preparar el código mediante la creación de una base de datos de CodeQL.
- Ejecutar consultas de CodeQL en la base de datos.
- Interpretar los resultados de la consulta.
En esta unidad, obtendrá información sobre las tres fases del análisis de CodeQL.
Creación de base de datos
Para crear una base de datos, CodeQL extrae primero una única representación relacional de cada archivo de código fuente en el código base.
Para los lenguajes compilados, la extracción funciona mediante la supervisión del proceso de compilación normal. Cada vez que se invoca un compilador para procesar un archivo de código fuente, se realiza una copia de ese archivo y se recopila toda la información pertinente sobre el código fuente. Esto incluye datos sintácticos sobre el árbol de sintaxis abstracta y datos semánticos sobre el enlace de nombres y la información de tipos.
En el caso de los lenguajes interpretados, el extractor se ejecuta directamente en el código fuente, resolviendo las dependencias para proporcionar una representación precisa del código base.
Hay un extractor para cada lenguaje compatible con CodeQL, a fin de garantizar que el proceso de extracción sea lo más preciso posible. En el caso de los códigos base con varios lenguajes, las bases de datos se generan en un lenguaje cada vez.
Después de la extracción, todos los datos necesarios para el análisis (datos relacionales, archivos de código fuente copiados y un esquema de base de datos específico del lenguaje que especifica las relaciones mutuas en los datos) se importan en un único directorio, conocido como una base de datos de CodeQL.
Ejecución de consultas
Una vez creada una base de datos de CodeQL, en ella se ejecutan una o varias consultas. Las consultas de CodeQL se escriben en un lenguaje de consulta orientado a objetos especialmente diseñado denominado QL.
Puede ejecutar las consultas extraídas del repositorio de CodeQL, o bien las consultas personalizadas que ha escrito usted mismo, mediante la extensión CodeQL para VS Code o la CLI de CodeQL.
Resultados de la consulta
El paso final convierte los resultados generados durante la ejecución de la consulta en un formulario más significativo en el contexto del código fuente, lo que significa que los resultados se interpretan de una manera que resalta el posible problema que las consultas están diseñadas para buscar.
Las consultas contienen propiedades de metadatos que indican cómo se deben interpretar los resultados. Por ejemplo, algunas consultas muestran un mensaje sencillo en una única ubicación en el código. Otras muestran una serie de ubicaciones que representan pasos a lo largo de una ruta de acceso al flujo de datos o al flujo de control, junto con un mensaje que explica la importancia del resultado. Las consultas que no tienen metadatos no se interpretan; sus resultados se representan como una tabla y no se muestran en el código fuente.
Después de la interpretación, los resultados se muestran para la revisión y la evaluación del código. En CodeQL para Visual Studio Code, los resultados de la consulta interpretados se muestran automáticamente en el código fuente. Los resultados generados por la CLI de CodeQL se pueden mostrar en una serie de formatos diferentes para poder utilizarlos con distintas herramientas.