Partager via


Utilisation de requêtes personnalisées avec CodeQL

Par défaut, si vous n’avez pas spécifié de fichier de configuration personnalisé dans la configuration de votre pipeline, CodeQL exécute le pack de requêtes security-extended pour analyser votre code. Vous pouvez utiliser des requêtes CodeQL personnalisées pour écrire vos propres requêtes et ainsi rechercher des vulnérabilités et des erreurs spécifiques. Vous devez également créer un fichier de configuration personnalisé pour modifier l’analyse par défaut de CodeQL.

Pour rechercher des requêtes personnalisées existantes ou pour contribuer à votre propre requête personnalisée, consultez Contribution à CodeQL.

Analyse avec des requêtes personnalisées

Le moyen le plus rapide de commencer avec une requête personnalisée consiste à écrire une requête et à l’enregistrer dans votre référentiel Azure DevOps local. Vous pouvez personnaliser les détails d’une requête personnalisée en fonction de vos besoins, mais elle doit comporter au moins un ID de règle. Pour plus d’informations sur la rédaction de vos propres requêtes CodeQL, veuillez consulter la section Rédaction de requêtes CodeQL. Vous pouvez également regrouper plusieurs requêtes dans une suite de requêtes ou utiliser des packs publiés par d’autres personnes. Pour plus d’informations, consultez la section Publication et utilisation des packs CodeQL.

Utilisation d’un fichier de configuration personnalisé

Un fichier de configuration personnalisé est un moyen de gérer les requêtes exécutées pendant l’analyse de CodeQL sur votre code. Vous pouvez spécifier plus de requêtes ou de packs de requêtes à exécuter, et changer ou désactiver les requêtes CodeQL par défaut.

Pour inclure une requête spécifique de votre choix, spécifiez la requête avec un nom et un chemin d’accès à l’emplacement du fichier de requête (.ql) dans votre référentiel.

Pour inclure un pack spécifique de votre choix, spécifiez le nom du pack. Vous pouvez spécifier n’importe quel nombre de packs de requêtes CodeQL à exécuter dans votre fichier de configuration.

L’étape suivante consiste à créer un fichier qlpack.yml. Ce fichier déclare le pack CodeQL et les informations le concernant. Tous les fichiers *.ql se trouvant dans le même répertoire (ou sous-répertoire) qu’un qlpack.yml sont considérés comme faisant partie du package.

Conseil

Le filtre packs provenant du fichier de configuration prend en charge les packs de téléchargement à partir de référentiels hébergés dans GitHub, ce qui n'est pas le cas du filtre queries. Si le pack est privé dans GitHub, vous devez fournir un jeton d’accès GitHub via la tâche AdvancedSecurity-Codeql-Init@1 en tant que variable d’environnement et un nom de variable en tant que GITHUB_TOKEN, l’étendue du jeton étant read:packages.

Voici un exemple de fichier de configuration :

name: "Run custom queries"

# When using a configuration file, if you do not disable default queries,
# then the default CodeQL queries in the `code-scanning` query suite will also execute upon analysis.
disable-default-queries: true
 
# To reference local queries saved to your repository,
# the path must start with `./` followed by the path to the custom query or queries.
# Names for each query referenced is optional.
queries:
  - name: Use security-extended query suite
    uses: security-extended
  - name: Use local custom query (single query)
    uses: ./customQueries/javascript/FindTestFunctions.ql
  - name: Use local custom query (directory of queries)
    uses: ./customQueries/javascript/MemoryLeakQueries  
 
packs:
 - mygithuborg/mypackname
 
paths:
 - src
 
paths-ignore:
  - src/node_modules
  - '**/*.test.js'
 
query-filters:
 - include:
    kind: problem
 - include:
     precision: medium
 - exclude:
    id:
      - js/angular/disabling-sce
      - js/angular/insecure-url-allowlist

Conseil

Les spécifications du fichier de configuration ignorent et sont prioritaires sur les configurations au niveau du pipeline pour la tâche AdvancedSecurity-Codeql-Init@1. includepaths / ignorepaths seront ignorés ou, si paths/paths-ignore sont présents, ils seront remplacés par les valeurs issues de paths/paths-ignore. querysuite sera remplacé par des valeurs spécifiées dans queries ou packs dans le fichier de configuration.

Si vous utilisez une requête personnalisée, voici un exemple de qlpack.yml placé dans le répertoire de vos requêtes personnalisées :

version: 1.0.1
dependencies:
  codeql/javascript-all: "*"
  codeql/javascript-queries: "*"

La variable dependencies contient toutes les dépendances de ce package et leurs plages de versions compatibles. Chaque dépendance est référencée comme le scope/name d’un pack de bibliothèque CodeQL. Lors de la définition de dependencies, votre qlpack.yml dépend exactement de l’un des packs de langage de base (par exemple, JavaScript, C#, Ruby, etc.), ce qui détermine le langage que votre requête peut analyser.

Pour des conseils plus spécifiques et des options de configuration avec votre fichier de configuration, veuillez consulter la section Personnalisation de votre configuration avancée pour l’analyse de code ou pour configuration de qlpack.yml, consultez la section Structure du pack CodeQL.

Une fois que vous avez votre fichier de configuration, vous devez personnaliser votre pipeline exécutant l’analyse CodeQL pour pouvoir utiliser votre nouveau fichier. Voici un exemple de pipeline pointant vers un fichier de configuration :

trigger: none
 
pool:
  vmImage: windows-latest

# You can either specify your CodeQL variables in a variable block... 
variables:
# `configfilepath` must be an absolute file path relative to the repository root
  advancedsecurity.codeql.configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml' 

# Or you can specify variables as variables for the task. You do not need both definitions. 
steps:
- task: AdvancedSecurity-Codeql-Init@1
  displayName: Initialize CodeQL
  inputs:
    languages: 'javascript'
    loglevel: '2'
    configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml'
# If downloading a pack from GitHub,
# you must include a GitHub access token with the scope of `read:packages`.
  env:
    GITHUB_TOKEN: $(githubtoken)

- task: AdvancedSecurity-Codeql-Analyze@1
  displayName: Perform CodeQL Analysis