Comment CodeQL analyse-t-il le code ?

Effectué

L’implémentation de l’analyse du code avec CodeQL requiert une compréhension de la manière dont l’outil analyse le code.

Une analyse CodeQL se compose de trois étapes :

  1. Préparation du code en créant une base de données CodeQL.
  2. Exécution des requêtes CodeQL sur la base de données.
  3. Interprétation des résultats de la requête.

Dans cette unité, vous allez découvrir les trois phases de l’analyse CodeQL.

Création de base de données

Pour créer une base de données, CodeQL extrait d’abord une seule représentation relationnelle de chaque fichier source dans le codebase.

Pour les langages compilés, l’extraction fonctionne en surveillant le processus de génération normal. Chaque fois qu’un compilateur est appelé pour traiter un fichier source, une copie de ce fichier est créée et toutes les informations pertinentes sur le code source sont collectées. Cela comprend les données syntaxiques relatives à l’arborescence de syntaxe abstraite et les données sémantiques relatives à la liaison de nom et aux informations de type.

Pour les langages interprétés, l’extracteur s’exécute directement sur le code source, ce qui permet de résoudre les dépendances pour fournir une représentation précise du codebase.

Il existe un extracteur pour chaque langage pris en charge par CodeQL pour vous assurer que le processus d’extraction est aussi précis que possible. Pour les codebases multilingues, les bases de données sont générées un langage à la fois.

Après l’extraction, toutes les données requises pour l’analyse (données relationnelles, fichiers sources copiés et schéma de base de données spécifique au langage qui spécifie les relations mutuelles dans les données) sont importées dans un même répertoire, connu sous le nom de base de données CodeQL.

Exécution de la requête

Une fois que vous avez créé une base de données CodeQL, une ou plusieurs requêtes sont exécutées sur celle-ci. Les requêtes CodeQL sont écrites dans un langage de requête orienté objet conçu spécialement, appelé QL.

Vous pouvez exécuter les requêtes extraites du référentiel CodeQL (ou des requêtes personnalisées que vous avez écrites vous-même) à l’aide de l’extension CodeQL pour VS Code ou de l’interface CLI CodeQL.

Résultats de la requête

La dernière étape convertit les résultats produits lors de l’exécution de la requête sous une forme plus parlante dans le contexte du code source, ce qui signifie que les résultats sont interprétés d’une façon qui met en évidence le problème potentiel que les requêtes sont conçues pour rechercher.

Capture d’écran des résultats de la requête CodeQL.

Les requêtes contiennent des propriétés de métadonnées qui indiquent comment les résultats doivent être interprétés. Par exemple, certaines requêtes affichent un message simple à un seul emplacement dans le code. D’autres affichent une série d’emplacements qui représentent des étapes sur un chemin de flux de données ou de contrôle, ainsi qu’un message expliquant l’importance du résultat. Les requêtes qui n’ont pas de métadonnées ne sont pas interprétées ; leurs résultats sont générés sous la forme d’une table et ne s’affichent pas dans le code source.

Après l’interprétation, les résultats sont générés pour la révision du code et le triage. Dans CodeQL pour Visual Studio Code, les résultats interprétés de la requête sont automatiquement affichés dans le code source. Vous pouvez obtenir les résultats générés par l’interface CLI CodeQL dans plusieurs formats différents pour les utiliser avec différents outils.