Remarque
Votre administrateur de site doit activer l’code scanning avant de pouvoir utiliser cette fonctionnalité. Si vous souhaitez utiliser GitHub Actions pour analyser votre code, l’administrateur de site doit également activer GitHub Actions et configurer l’infrastructure nécessaire. Pour plus d’informations, consultez « Configuration de l’analyse de code pour votre appliance ».
Remarque
Cet article décrit les fonctionnalités disponibles avec la version de l’action CodeQL et le pack CodeQL CLI associé inclus dans la mise en production initiale de cette version de GitHub Enterprise Server. Si votre entreprise utilise une version plus récente de l’action CodeQL, consultez la version GitHub Enterprise Cloud de cet article pour obtenir plus d’informations sur les dernières fonctionnalités. Pour plus d’informations sur l’utilisation de la dernière version, consultez Configuration de l’analyse de code pour votre appliance.
Prerequisites
Vous devez utiliser la configuration avancée pour code scanning et être capable de modifier le fichier de flux de travail dans lequel votre configuration est définie.
Les exemples fournis dans cet article concernent le Workflow d’analyse CodeQL fichier. Par défaut, ce fichier est défini à .github/workflows/codeql-analysis.yml.
Fréquence d’analyse
Vous pouvez configurer l’analyse du Workflow d’analyse CodeQL code selon une planification ou lorsque des événements spécifiques se produisent dans un référentiel.
L’analyse du code quand un utilisateur pousse (push) une modification et chaque fois qu’une demande de tirage est créée empêche les développeurs d’introduire de nouvelles vulnérabilités et erreurs dans le code. L’analyse du code selon une planification vous informe des dernières vulnérabilités et erreurs que GitHub, les chercheurs en sécurité et la communauté découvrent, même lorsque les développeurs ne gèrent pas activement le référentiel.
Analyse sur poussée
Par défaut, l’événement Workflow d’analyse CodeQL utilise l’événement on:push pour déclencher une analyse de code sur chaque push vers la branche par défaut du référentiel et toutes les branches protégées. Pour code scanning être déclenché sur une branche spécifiée, le flux de travail doit exister dans cette branche. Pour plus d’informations, consultez « Syntaxe de flux de travail pour GitHub Actions ».
Si vous effectuez une analyse push, les résultats s’affichent sous l’onglet Security de votre référentiel. Pour plus d’informations, consultez « Évaluation des alertes d’analyse du code pour votre référentiel ».
Par ailleurs, quand une analyse on:push retourne des résultats pouvant être mappés à une demande de tirage ouverte, ces alertes s’affichent automatiquement sur la demande de tirage au même endroit que les autres alertes de demande de tirage. Les alertes sont identifiées en comparant l’analyse existante de la tête de la branche à l’analyse de la branche cible. Pour plus d’informations sur code scanning les alertes dans les pull requests, consultez Triage des alertes d’analyse du code dans les demandes de tirage (pull request).
Analyse des demandes de tirage
La valeur par défaut Workflow d’analyse CodeQL utilise l’événement pull_request pour déclencher une analyse de code sur les demandes d’extraction ciblées sur la branche par défaut.
L’événement pull_request n’est pas déclenché si la demande de tirage a été ouverte à partir d’une duplication privée.
Pour plus d’informations sur l’événement pull_request, consultez Événements qui déclenchent des flux de travail.
Si vous analysez des demandes de tirage, les résultats s’affichent sous forme d’alertes dans une vérification des demandes de tirage. Pour plus d’informations, consultez « Triage des alertes d’analyse du code dans les demandes de tirage (pull request) ».
L’utilisation du déclencheur pull_request, configuré pour analyser le commit de fusion de la demande de tirage au lieu du commit de tête, produit des résultats plus efficaces et plus exacts que l’analyse de la tête de la branche pour chaque poussée. Toutefois, si vous utilisez un système CI/CD qui ne peut pas être configuré pour se déclencher sur les pull requests, vous pouvez toujours utiliser le on:push déclencheur, et code scanning mappe les résultats aux pull requests ouvertes sur la branche et ajoute les alertes en tant qu'annotations sur le pull request. Pour plus d’informations, consultez Analyse sur poussée.
Prévention des analyses inutiles des demandes de tirage
Vous souhaiterez peut-être éviter qu’une analyse du code ne soit déclenchée sur des demandes de tirage spécifiques ciblées sur la branche par défaut, quels que soient les fichiers qui ont été modifiés. Vous pouvez le configurer en spécifiant on:pull_request:paths-ignore ou on:pull_request:paths dans le code scanning flux de travail. Par exemple, si les seules modifications apportées à une demande de tirage concernent des fichiers portant l’extension .md ou .txt, vous pouvez utiliser le tableau paths-ignore suivant.
on:
push:
branches: [main, protected]
pull_request:
branches: [main]
paths-ignore:
- '**/*.md'
- '**/*.txt'
on:
push:
branches: [main, protected]
pull_request:
branches: [main]
paths-ignore:
- '**/*.md'
- '**/*.txt'
Remarque
`on:pull_request:paths-ignore` et `on:pull_request:paths` définissent les conditions qui déterminent si les actions du workflow s’exécutent sur une demande de tirage. Ils ne déterminent pas les fichiers qui sont analysés quand les actions _sont_ exécutées. Quand une demande de tirage contient des fichiers qui ne sont pas mis en correspondance par `on:pull_request:paths-ignore` ou `on:pull_request:paths`, le workflow exécute les actions et analyse tous les fichiers modifiés dans la demande de tirage, y compris ceux mis en correspondance par `on:pull_request:paths-ignore` ou `on:pull_request:paths`, sauf si les fichiers ont été exclus. Pour plus d’informations sur l’exclusion de fichiers de l’analyse, consultez [Spécification des répertoires à analyser](#specifying-directories-to-scan).
Pour plus d’informations sur l’utilisation de on:pull_request:paths-ignore et on:pull_request:paths pour déterminer quand un workflow s’exécute pour une demande de tirage, consultez Syntaxe de flux de travail pour GitHub Actions.
Analyse selon une planification
Si vous utilisez la valeur par défaut Workflow d’analyse CodeQL, le flux de travail analyse le code dans votre référentiel une fois par semaine, en plus des analyses déclenchées par des événements. Pour ajuster ce calendrier, modifiez la valeur cron pour l’événement on.schedule dans le flux de travail. Pour plus d’informations, consultez « Syntaxe de flux de travail pour GitHub Actions ».
Remarque
Cet événement déclenche l’exécution d’un flux de travail uniquement si le fichier de flux de travail existe sur la branche par défaut.
Exemple
L’exemple suivant montre un Workflow d’analyse CodeQL référentiel particulier qui a une branche par défaut appelée main et une branche protégée appelée protected.
on:
push:
branches: [main, protected]
pull_request:
branches: [main]
schedule:
- cron: '20 14 * * 1'
on:
push:
branches: [main, protected]
pull_request:
branches: [main]
schedule:
- cron: '20 14 * * 1'
Ce flux de travail analyse les éléments suivants :
- Chaque envoi (push) vers la branche par défaut et la branche protégée
- Chaque demande de tirage (pull request) sur la branche par défaut
- La branche par défaut tous les lundis à 14:20 UTC
Système d’exploitation
Remarque
- L’analyse du code Swift utilise des exécuteurs macOS par défaut.
- Code scanning du code Swift n’est pas pris en charge pour les exécuteurs qui font partie d’un ARC Actions Runner Controller, car les exécuteurs ARC utilisent uniquement Linux et Swift nécessite des exécuteurs macOS. Toutefois, vous pouvez avoir un mélange d’exécuteurs ARC et d’exécuteurs macOS auto-hébergés. Pour plus d’informations, consultez « Actions Runner Controller ».
Si votre code nécessite une compilation d’un système d’exploitation spécifique, vous pouvez configurer le système d’exploitation dans votre Workflow d’analyse CodeQL. Modifiez la valeur de jobs.analyze.runs-on pour spécifier le système d'exploitation de l'ordinateur qui exécute votre code scanning action.
Vous spécifiez le système d’exploitation à l’aide d’une étiquette appropriée comme deuxième élément d’un tableau à deux éléments, après self-hosted.
jobs:
analyze:
name: Analyze
runs-on: [self-hosted, ubuntu-latest]
jobs:
analyze:
name: Analyze
runs-on: [self-hosted, ubuntu-latest]
CodeQL
code scanning prend en charge les dernières versions d’Ubuntu, Windows et macOS. Les valeurs classiques de ce paramètre sont donc : `ubuntu-latest`, `windows-latest` et `macos-latest`. Pour plus d’informations, consultez « [AUTOTITLE](/actions/using-jobs/choosing-the-runner-for-a-job) » et « [AUTOTITLE](/actions/hosting-your-own-runners/managing-self-hosted-runners/using-labels-with-self-hosted-runners) ».
Vous devez vous assurer que Git se trouve dans la variable PATH sur vos exécuteurs auto-hébergés. Pour plus d’informations, consultez « [AUTOTITLE](/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners) » et « [AUTOTITLE](/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners) ».
Pour obtenir les spécifications recommandées (RAM, cœurs d’UC et disque) pour l’exécution CodeQL d’une analyse auto-hébergées, consultez Ressources matérielles recommandées pour l’exécution de CodeQL.
CodeQL emplacement de la base de données
En règle générale, vous n’avez pas besoin de vous soucier de l’emplacement Workflow d’analyse CodeQLCodeQL des bases de données, car les étapes ultérieures recherchent automatiquement les bases de données créées par les étapes précédentes. Toutefois, si vous écrivez une étape de flux de travail personnalisée qui nécessite que la CodeQL base de données se trouve dans un emplacement de disque spécifique, par exemple pour charger la base de données en tant qu’artefact de flux de travail, vous pouvez spécifier cet emplacement à l’aide du db-location paramètre sous l’action init .
- uses: github/codeql-action/init@v4
with:
db-location: '${{ github.runner_temp }}/my_location'
- uses: github/codeql-action/init@v4
with:
db-location: '${{ github.runner_temp }}/my_location'
Le Workflow d’analyse CodeQL s'attendra à ce que le chemin fourni dans db-location soit accessible en écriture, et à ce qu'il n'existe pas ou soit un répertoire vide. Lors de l’utilisation de ce paramètre dans un travail en cours d’exécution sur un exécuteur auto-hébergé ou avec un conteneur Docker, il incombe à l’utilisateur de s’assurer que le répertoire choisi est effacé entre les exécutions ou que les bases de données sont supprimées une fois qu’elles ne sont plus nécessaires. Cela n’est pas nécessaire pour les travaux s’exécutant sur GitHubdes exécuteurs hébergés, qui obtiennent une nouvelle instance et un système de fichiers propre chaque fois qu’ils s’exécutent. Pour plus d’informations, consultez « Exécuteurs hébergés par GitHub ».
Si ce paramètre n’est pas utilisé, il Workflow d’analyse CodeQL crée des bases de données dans un emplacement temporaire de son propre choix. Actuellement, la valeur par défaut est ${{ github.runner_temp }}/codeql_databases.
Langues à analyser
CodeQL
code scanning prend en charge le code écrit dans les langues suivantes :
- C/C++
- C#
- Go
- Java/Kotlin
- JavaScript/TypeScript
- Python
- Ruby
- Rust (préversion publique)
- Workflows rapides
Remarque
- Utilisez
java-kotlinpour analyser le code écrit en Java, Kotlin ou les deux. - Utilisez
javascript-typescriptpour analyser le code écrit en JavaScript, TypeScript ou les deux.
Pour plus d’informations, consultez la documentation disponible sur le site web de CodeQL : Langages et frameworks pris en charge.
CodeQL utilise les identificateurs de langue suivants :
| Langage | Identificateur | Identificateurs alternatifs facultatifs (le cas échéant) |
|---|---|---|
| C/C++ | c-cpp | c ou cpp |
| C# | csharp | |
| Go | go | |
| Java/Kotlin | java-kotlin | java ou kotlin |
| JavaScript/TypeScript | javascript-typescript | javascript ou typescript |
| Python | python | |
| Ruby | ruby | |
| Rust (préversion publique) | rust | |
| Swift | swift |
Remarque
Si vous spécifiez l'un des identificateurs alternatifs, cela équivaut à l'utilisation de l'identificateur de langue standard. Par exemple, la spécification javascript au lieu de javascript-typescript n’exclut pas l’analyse du code TypeScript. Vous pouvez également utiliser un fichier de configuration personnalisé pour exclure des fichiers de l’analyse à l’aide du paramètre paths-ignore. Pour plus d’informations, consultez Utilisation d’un fichier de configuration personnalisé et Spécification des répertoires à analyser.
Ces identificateurs de langage peuvent être utilisés comme arguments pour l’entrée languages de l’action init. Nous recommandons de ne fournir qu’un seul langage comme argument :
- uses: github/codeql-action/init@v4
with:
languages: javascript-typescript
- uses: github/codeql-action/init@v4
with:
languages: javascript-typescript
Le fichier par défaut Workflow d’analyse CodeQL créé après la configuration avancée de l’installation pour l’analyse du code avec CodeQL définit une matrice contenant une propriété nommée language qui répertorie les langues de votre référentiel qui seront analysées. Cette matrice a été automatiquement préremplie avec les langages pris en charge détectés dans votre référentiel. L’utilisation de la language matrice permet CodeQL d’exécuter chaque analyse de langage en parallèle et de personnaliser l’analyse pour chaque langue. Dans une analyse individuelle, le nom du langage de la matrice est fourni à l’action init comme argument pour l’entrée languages. Nous recommandons que tous les flux de travail adoptent cette configuration. Pour plus d’informations sur les matrices, consultez Exécution de variantes de tâches dans un workflow.
- uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
- uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
Si votre flux de travail utilise la language matrice, CodeQL il analyse uniquement les langues de la matrice. Pour changer les langages que vous souhaitez analyser, modifiez la configuration de la matrice. Vous pouvez supprimer un langage pour empêcher son analyse. Il existe plusieurs raisons pour lesquelles vous pouvez souhaiter empêcher l’analyse d’un langage. Par exemple, le projet peut avoir des dépendances dans un langage autre que celui du corps principal de votre code, et vous préférerez peut-être ne pas voir les alertes pour ces dépendances. Vous pouvez également ajouter une langue qui n’était pas présente dans le référentiel lors code scanning de la configuration. Par exemple, si le référentiel contenait initialement uniquement JavaScript lors code scanning de la configuration et que vous avez ajouté ultérieurement du code Python, vous devez ajouter python à la matrice.
jobs:
analyze:
name: Analyze
...
strategy:
fail-fast: false
matrix:
include:
- language: javascript-typescript
build-mode: none
- language: python
build-mode: none
jobs:
analyze:
name: Analyze
...
strategy:
fail-fast: false
matrix:
include:
- language: javascript-typescript
build-mode: none
- language: python
build-mode: none
Pour les langages compilés, la matrice peut également être utilisée pour configurer le mode de génération à utiliser pour l’analyse en modifiant la valeur de la propriété build-mode. Pour plus d’informations sur les modes de génération, consultez Analyse CodeQL pour les langages compilés.
Si votre flux de travail ne fournit pas d’argument à l’entrée languages de l’action init , CodeQL il est configuré pour exécuter des analyses séquentiellement. Dans ce cas, CodeQL détecte et tente automatiquement d’analyser toutes les langues prises en charge dans le référentiel. Selon la taille du référentiel et le nombre de langues, cela peut prendre beaucoup de temps. Si l’analyse d’un langage échoue dans ce mode, l’analyse de tous les langages échoue. Par conséquent, nous ne recommandons pas cette configuration.
Remarque
Lors de l’analyse séquentielle des langues, le mode de génération par défaut de chaque langage sera utilisé. Sinon, si vous fournissez une étape autobuild explicite, toutes les langues prenant en charge le mode autobuild l’utiliseront, tandis que les autres continueront d’utiliser leur mode par défaut. Si une configuration du mode de génération plus complexe que celle-ci est nécessaire, vous devrez configurer une matrice.
Gravité des alertes pour les échecs de vérification
Vous pouvez utiliser des ensembles de règles pour empêcher la fusion des demandes de tirage (pull request) lorsque l’une des conditions suivantes est remplie :
- Un outil requis détecte une alerte code scanning dont la gravité est spécifiée dans l’ensemble de règles.
- L’analyse d’un outil requis est toujours en cours.
- Un outil requis n’est pas configuré pour le référentiel.
Pour plus d’informations, consultez « Définir la protection contre la fusion d’analyse du code ». Pour plus d’informations générales sur les ensembles de règles, consultez À propos des ensembles de règles.
Catégorie d’analyse
Utilisez category pour distinguer plusieurs analyses pour le même outil et le même commit, mais effectuées dans différents langages ou différentes parties du code. La catégorie que vous spécifiez dans votre workflow est incluse dans le fichier de résultats SARIF.
Ce paramètre est particulièrement utile si vous utilisez des monodépôts et que vous avez plusieurs fichiers SARIF pour différents composants du monodépôt.
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
# Optional. Specify a category to distinguish between multiple analyses
# for the same tool and ref. If you don't use `category` in your workflow,
# GitHub will generate a default category name for you
category: "my_category"
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
# Optional. Specify a category to distinguish between multiple analyses
# for the same tool and ref. If you don't use `category` in your workflow,
# GitHub will generate a default category name for you
category: "my_category"
Si vous ne spécifiez pas de category paramètre dans votre flux de travail, GitHub génère un nom de catégorie pour vous, en fonction du nom du fichier de flux de travail qui déclenche l’action, le nom de l’action et toutes les variables de matrice. Par exemple:
- Le workflow
.github/workflows/codeql-analysis.ymlet l’actionanalyzeproduisent la catégorie.github/workflows/codeql.yml:analyze. - Le workflow
.github/workflows/codeql-analysis.yml, l’actionanalyzeet les variables de matrice{language: javascript-typescript, os: linux}produisent la catégorie.github/workflows/codeql-analysis.yml:analyze/language:javascript-typescript/os:linux.
La valeur category apparaît en tant que propriété <run>.automationDetails.id dans SARIF v2.1.0. Pour plus d’informations, consultez « Prise en charge de SARIF pour l’analyse du code ».
La catégorie que vous spécifiez ne remplace pas les détails de l’objet runAutomationDetails dans le fichier SARIF, le cas échéant.
CodeQL packs de modèles
Si votre codebase dépend d’une bibliothèque ou d’une infrastructure qui n’est pas reconnue par les requêtes standard dans CodeQL, vous pouvez étendre la CodeQL couverture dans votre code scanning flux de travail en spécifiant des packs de modèles publiés CodeQL . Pour plus d'informations sur la création de vos propres packs de modèles, consultez Création et utilisation de packs CodeQL.
Remarque
Les packs de modèles CodeQL sont actuellement en préversion publique et peuvent faire l’objet de modifications. Les packs de modèles sont pris en charge pour l’analyse C/C++, C#, Java/Kotlin, Python, et Ruby.
L’éditeur de modèle CodeQL de l’extension CodeQL pour Visual Studio Code prend en charge les dépendances de modélisation pour C#, Java/Kotlin, Python et Ruby.
Utilisation de CodeQL paquets de modèles
Pour ajouter un ou plusieurs packs de modèles publiés CodeQL, spécifiez-les à l’intérieur de l’entrée with: packs: dans la section uses: github/codeql-action/init@v4 du flux de travail. Dans packs, vous spécifiez un ou plusieurs packages à utiliser et, éventuellement, la version à télécharger. Si vous ne spécifiez pas de version, la version la plus récente est téléchargée. Si vous voulez utiliser des packages qui ne sont pas disponibles publiquement, vous avez besoin de définir la variable d’environnement GITHUB_TOKEN sur une secret qui a accès aux packages. Pour plus d’informations, consultez « Utiliser GITHUB_TOKEN pour l’authentification dans les flux de travail » et « Utilisation de secrets dans GitHub Actions ».
- uses: github/codeql-action/init@v4
with:
config-file: ./.github/codeql/codeql-config.yml
queries: security-extended
packs: my-company/my-java-queries@~7.8.9,my-repo/my-java-model-pack
- uses: github/codeql-action/init@v4
with:
config-file: ./.github/codeql/codeql-config.yml
queries: security-extended
packs: my-company/my-java-queries@~7.8.9,my-repo/my-java-model-pack
Dans cet exemple, les requêtes par défaut sont exécutées pour Java, ainsi que les requêtes d’une version supérieure ou égale à 7.8.9 et inférieures à 7.9.0 du pack de requêtes my-company/my-java-queries. Les dépendances modélisées dans la dernière version du pack de modèles my-repo/my-java-model-pack seront disponibles à la fois pour les requêtes par défaut et pour celles en my-company/my-java-queries.
Requêtes non par défaut
Quand vous utilisez CodeQL pour analyser du code, le moteur d’analyse de CodeQL génère une base de données à partir du code et exécute des requêtes sur celle-ci. L’analyse CodeQL utilise un ensemble de requêtes par défaut, mais vous pouvez spécifier d’autres requêtes à exécuter en plus des requêtes par défaut.
Conseil
Vous pouvez aussi spécifier les requêtes à exclure de l’analyse ou à inclure dans l’analyse. L’utilisation d’un fichier de configuration personnalisé est alors nécessaire. Pour plus d’informations, consultez fichiers de configuration personnalisés et exclusion de requêtes spécifiques de l’analyse ci-dessous.
Vous pouvez exécuter des requêtes supplémentaires si elles font partie d’un pack CodeQL publié sur le Container registry GitHub ou d’un pack CodeQL stocké dans un dépôt. Pour plus d’informations, consultez « À propos de l’analyse du code avec CodeQL ».
Les options disponibles pour spécifier les requêtes supplémentaires à exécuter sont les suivantes :
-
`packs` pour installer un ou plusieurs packs de requêtes CodeQL et exécuter les requêtes ou la suite de requêtes par défaut de ces packs. -
`queries` pour spécifier un seul fichier _.ql_, un répertoire contenant plusieurs fichiers _.ql_, un fichier de définition de suite de requêtes _.qls_ ou une combinaison de ces possibilités. Pour plus d’informations sur les définitions de suites de requêtes, consultez [Création de suites de requêtes CodeQL](https://codeql.github.com/docs/codeql-cli/creating-codeql-query-suites/).
Vous pouvez utiliser à la fois packs et queries dans le même workflow.
Utilisation des packs de requêtes
Pour ajouter un ou plusieurs CodeQL packs de requêtes, ajoutez une with: packs: entrée dans la uses: github/codeql-action/init@v4 section du flux de travail. Dans packs, vous spécifiez un ou plusieurs packages à utiliser et, éventuellement, la version à télécharger. Si vous ne spécifiez pas de version, la version la plus récente est téléchargée. Si vous voulez utiliser des packages qui ne sont pas disponibles publiquement, vous avez besoin de définir la variable d’environnement GITHUB_TOKEN sur une secret qui a accès aux packages. Pour plus d’informations, consultez « Utiliser GITHUB_TOKEN pour l’authentification dans les flux de travail » et « Utilisation de secrets dans GitHub Actions ».
Remarque
Pour les flux de travail qui génèrent des CodeQL bases de données pour plusieurs langues, vous devez plutôt spécifier les CodeQL packs de requêtes dans un fichier de configuration. Pour plus d’informations, consultez Spécification des packs de CodeQL requêtes ci-dessous.
Dans l’exemple ci-dessous, scope correspond au compte d’organisation ou personnel qui a publié le package. Lorsque le flux de travail s'exécute, les quatre CodeQL packs de requêtes sont téléchargés depuis GitHub et les requêtes par défaut ou la suite de requêtes pour chaque pack s'exécutent.
- La dernière version de
pack1est téléchargée et toutes les requêtes par défaut sont exécutées. - La version 1.2.3 de
pack2est téléchargée et toutes les requêtes par défaut sont exécutées. - La dernière version de
pack3qui est compatible avec la version 3.2.1 est téléchargée et toutes les requêtes sont exécutées. - La version 4.5.6 de
pack4est téléchargée et seules les requêtes trouvées danspath/to/queriessont exécutées.
- uses: github/codeql-action/init@v4
with:
# Comma-separated list of packs to download
packs: scope/pack1,scope/pack2@1.2.3,scope/pack3@~3.2.1,scope/pack4@4.5.6:path/to/queries
- uses: github/codeql-action/init@v4
with:
# Comma-separated list of packs to download
packs: scope/pack1,scope/pack2@1.2.3,scope/pack3@~3.2.1,scope/pack4@4.5.6:path/to/queries
Remarque
Si vous spécifiez une version particulière d’un pack de requêtes à utiliser, sachez que la version que vous spécifiez peut éventuellement devenir trop ancienne pour être utilisée efficacement par le moteur par défaut CodeQL utilisé par l’action CodeQL . Pour garantir des performances optimales, si vous avez besoin de spécifier des versions de pack de requêtes exactes, envisagez de vérifier régulièrement si la version épinglée du pack de requêtes a besoin d’être incrémentée.
Pour plus d’informations sur la compatibilité des packs, consultez Informations de référence sur les packs de requêtes CodeQL.
Téléchargement CodeQL de packs à partir de GitHub Enterprise Server
Si votre flux de travail utilise des packs publiés sur une GitHub Enterprise Server installation, vous devez indiquer à votre flux de travail où les trouver. Pour ce faire, utilisez l’entrée registries de l’action github/codeql-action/init@v4 . Cette entrée accepte une liste de propriétés url, packageset token, comme indiqué ci-dessous.
- uses: github/codeql-action/init@v4
with:
registries: |
# URL to the container registry, usually in this format
- url: https://containers.GHEHOSTNAME1/v2/
# List of package glob patterns to be found at this registry
packages:
- my-company/*
- my-company2/*
# Token, which should be stored as a secret
token: ${{ secrets.GHEHOSTNAME1_TOKEN }}
# URL to the default container registry
- url: https://ghcr.io/v2/
# Packages can also be a string
packages: "*/*"
token: ${{ secrets.GHCR_TOKEN }}
- uses: github/codeql-action/init@v4
with:
registries: |
# URL to the container registry, usually in this format
- url: https://containers.GHEHOSTNAME1/v2/
# List of package glob patterns to be found at this registry
packages:
- my-company/*
- my-company2/*
# Token, which should be stored as a secret
token: ${{ secrets.GHEHOSTNAME1_TOKEN }}
# URL to the default container registry
- url: https://ghcr.io/v2/
# Packages can also be a string
packages: "*/*"
token: ${{ secrets.GHCR_TOKEN }}
Comme les modèles de package dans la liste des registres sont examinés dans l’ordre, vous devez généralement placer les modèles de package les plus spécifiques en premier. Les valeurs pour token doivent être générées par l'instance GitHub à partir de laquelle vous téléchargez, avec la permission read:packages.
Notez le | après le nom de la propriété registries. Cela est important, car GitHub Actions les entrées ne peuvent accepter que des chaînes. L’utilisation de | convertit le texte suivant en chaîne, qui sera analysé ultérieurement par l’action github/codeql-action/init@v4.
Utilisation des requêtes dans des packs QL
Pour ajouter une ou plusieurs requêtes, ajoutez une entrée with: queries: dans la section uses: github/codeql-action/init@v4 du workflow. Si les requêtes se trouvent dans un dépôt privé, utilisez le paramètre external-repository-token pour spécifier un jeton doté de l’accès nécessaire pour extraire le dépôt privé.
Vous pouvez également spécifier des suites de requêtes dans la valeur de queries. Les suites de requêtes sont des collections de requêtes, généralement regroupées par objectif ou langage.
- uses: github/codeql-action/init@v4
with:
# Comma-separated list of queries / packs / suites to run.
# This may include paths or a built in suite, for example:
# security-extended or security-and-quality.
queries: security-extended
# Optional. Provide a token to access queries stored in private repositories.
external-repository-token: ${{ secrets.ACCESS_TOKEN }}
- uses: github/codeql-action/init@v4
with:
# Comma-separated list of queries / packs / suites to run.
# This may include paths or a built in suite, for example:
# security-extended or security-and-quality.
queries: security-extended
# Optional. Provide a token to access queries stored in private repositories.
external-repository-token: ${{ secrets.ACCESS_TOKEN }}
Les suites de requêtes suivantes sont intégrées à CodeQL code scanning et sont disponibles pour utilisation.
| Suite de requêtes | Description |
|---|---|
security-extended | Requêtes issues de la suite par défaut, plus requêtes de gravité et de précision moindres |
security-and-quality | Requêtes de security-extended, plus requêtes de maintenabilité et de fiabilité. |
Pour plus d’informations, consultez Suites de requêtes CodeQL.
Chacune de ces suites de requêtes contient un sous-ensemble différent des requêtes incluses dans le pack de requêtes CodeQL intégré pour ce langage. Les suites de requêtes sont générées automatiquement à l’aide des métadonnées de chaque requête. Pour plus d’informations, consultez Métadonnées pour les requêtes CodeQL.
Lorsque vous spécifiez une suite de requêtes, le moteur d’analyse CodeQL exécute l’ensemble par défaut de requêtes, ainsi que toutes les requêtes supplémentaires définies dans la suite de requêtes supplémentaire.
Utilisation de fichiers de configuration personnalisés
Si vous utilisez aussi un fichier de configuration pour des paramètres personnalisés, tous les packs ou requêtes supplémentaires spécifiés dans votre workflow sont utilisés à la place de ceux spécifiés dans le fichier de configuration. Si vous voulez exécuter l’ensemble combiné de packs ou requêtes supplémentaires, préfixez la valeur des packs ou queries dans le workflow avec le symbole +. Pour plus d’informations, consultez les fichiers de configuration personnalisés.
Dans l’exemple suivant, le symbole + garantit que les packs et requêtes supplémentaires spécifiés sont utilisés ensemble avec tous ceux spécifiés dans le fichier de configuration référencé.
- uses: github/codeql-action/init@v4
with:
config-file: ./.github/codeql/codeql-config.yml
queries: +security-and-quality,octo-org/python-qlpack/show_ifs.ql@main
packs: +scope/pack1,scope/pack2@1.2.3,scope/pack3@4.5.6:path/to/queries
- uses: github/codeql-action/init@v4
with:
config-file: ./.github/codeql/codeql-config.yml
queries: +security-and-quality,octo-org/python-qlpack/show_ifs.ql@main
packs: +scope/pack1,scope/pack2@1.2.3,scope/pack3@4.5.6:path/to/queries
Fichiers de configuration personnalisés
Un fichier de configuration personnalisé est une autre façon de spécifier des packs et des requêtes supplémentaires à exécuter. Vous pouvez également utiliser le fichier pour désactiver les requêtes par défaut, exclure ou inclure les requêtes spécifiques et spécifier les répertoires à analyser au cours de l’analyse.
Dans le fichier de workflow, utilisez le paramètre config-file de l’action init pour spécifier le chemin d’accès au fichier de configuration que vous souhaitez utiliser. Cet exemple charge le fichier de configuration ./.github/codeql/codeql-config.yml.
- uses: github/codeql-action/init@v4
with:
config-file: ./.github/codeql/codeql-config.yml
- uses: github/codeql-action/init@v4
with:
config-file: ./.github/codeql/codeql-config.yml
Le fichier de configuration peut être situé dans le référentiel que vous analysez ou dans un référentiel externe. L’utilisation d’un référentiel externe vous permet de spécifier des options de configuration pour plusieurs référentiels à un même emplacement. Quand vous référencez un fichier de configuration situé dans un dépôt externe, vous pouvez utiliser la syntaxe OWNER/REPOSITORY/FILENAME@BRANCH . Par exemple : octo-org/shared/codeql-config.yml@main.
Si le fichier de configuration se trouve dans un référentiel privé externe, utilisez le paramètre external-repository-token de l’action init pour spécifier un jeton qui a accès au référentiel privé.
- uses: github/codeql-action/init@v4
with:
external-repository-token: ${{ secrets.ACCESS_TOKEN }}
- uses: github/codeql-action/init@v4
with:
external-repository-token: ${{ secrets.ACCESS_TOKEN }}
Les paramètres dans le fichier de configuration sont écrits au format YAML.
Spécification de packs de requêtes CodeQL
Vous spécifiez des CodeQL packs de requêtes dans un tableau. Notez que le format est différent du format utilisé par le fichier de workflow.
packs: # Use the latest version of 'pack1' published by 'scope' - scope/pack1 # Use version 1.2.3 of 'pack2' - scope/pack2@1.2.3 # Use the latest version of 'pack3' compatible with 3.2.1 - scope/pack3@~3.2.1 # Use pack4 and restrict it to queries found in the 'path/to/queries' directory - scope/pack4:path/to/queries # Use pack5 and restrict it to the query 'path/to/single/query.ql' - scope/pack5:path/to/single/query.ql # Use pack6 and restrict it to the query suite 'path/to/suite.qls' - scope/pack6:path/to/suite.qls
packs:
# Use the latest version of 'pack1' published by 'scope'
- scope/pack1
# Use version 1.2.3 of 'pack2'
- scope/pack2@1.2.3
# Use the latest version of 'pack3' compatible with 3.2.1
- scope/pack3@~3.2.1
# Use pack4 and restrict it to queries found in the 'path/to/queries' directory
- scope/pack4:path/to/queries
# Use pack5 and restrict it to the query 'path/to/single/query.ql'
- scope/pack5:path/to/single/query.ql
# Use pack6 and restrict it to the query suite 'path/to/suite.qls'
- scope/pack6:path/to/suite.qls
Le format complet pour spécifier un pack de requêtes est scope/name[@version][:path].
version et path sont facultatifs.
version est la plage de versions de semver. Si le paramètre est absent, la dernière version est utilisée. Pour plus d’informations sur les plages semver, consultez la Documentation de semver sur npm.
Si vous disposez d’un flux de travail qui génère plusieurs CodeQL bases de données, vous pouvez spécifier les CodeQL packs de requêtes à exécuter dans un fichier de configuration personnalisé à l’aide d’une carte imbriquée de packs.
packs:
# Use these packs for JavaScript and TypeScript analysis
javascript:
- scope/js-pack1
- scope/js-pack2
# Use these packs for Java and Kotlin analysis
java:
- scope/java-pack1
- scope/java-pack2@v1.0.0
packs:
# Use these packs for JavaScript and TypeScript analysis
javascript:
- scope/js-pack1
- scope/js-pack2
# Use these packs for Java and Kotlin analysis
java:
- scope/java-pack1
- scope/java-pack2@v1.0.0
Extension de la couverture de CodeQL avec des modèles de menace
Remarque
Les modèles de menace se trouvent actuellement en préversion publique et peuvent être amenés à changer. Pendant la préversion publique, les modèles de risque ne sont pris en charge que par l’analyse pour Java/Kotlin et C#.
Le modèle de risque par défaut inclut les sources distantes de données non fiables. Vous pouvez étendre le CodeQL modèle de menace pour inclure des sources locales de données non approuvées (par exemple : arguments de ligne de commande, variables d’environnement, systèmes de fichiers et bases de données) en spécifiant threat-models: local dans un fichier de configuration personnalisé. Si vous étendez le modèle de risques, celui par défaut sera également utilisé.
Spécification de requêtes supplémentaires
Vous spécifiez des requêtes supplémentaires dans un tableau queries. Chaque élément du tableau contient un paramètre uses avec une valeur qui identifie un fichier de requête unique, un répertoire contenant des fichiers de requête ou un fichier de définition de suite de requêtes.
queries: - uses: ./my-basic-queries/example-query.ql - uses: ./my-advanced-queries - uses: ./query-suites/my-security-queries.qls
queries:
- uses: ./my-basic-queries/example-query.ql
- uses: ./my-advanced-queries
- uses: ./query-suites/my-security-queries.qls
Si vous le souhaitez, vous pouvez attribuer un nom à chaque élément de tableau, comme indiqué dans les exemples de fichiers de configuration ci-dessous. Pour plus d’informations sur les requêtes supplémentaires, consultez Requêtes non par défaut ci-dessus.
Désactivation des requêtes par défaut
Si vous souhaitez uniquement exécuter des requêtes personnalisées, vous pouvez désactiver les requêtes de sécurité par défaut à l’aide de disable-default-queries: true.
Exclusion de requêtes spécifiques de l’analyse
Vous pouvez ajouter les filtres exclude et include à votre fichier de configuration personnalisé afin de spécifier les requêtes que vous souhaitez exclure ou inclure dans l’analyse.
Cela est utile si vous souhaitez exclure, par exemple :
- Des requêtes spécifiques des suites par défaut (
security,security-extendedetsecurity-and-quality). - Des requêtes spécifiques dont les résultats ne vous intéressent pas.
- Toutes les requêtes qui génèrent des avertissements et des recommandations.
Vous pouvez utiliser des filtres exclude similaires à ceux du fichier de configuration ci-dessous pour exclure les requêtes que vous souhaitez supprimer de l’analyse par défaut. Dans l’exemple de fichier de configuration ci-dessous, les deux requêtes js/redundant-assignment et js/useless-assignment-to-local sont exclues de l’analyse.
query-filters:
- exclude:
id: js/redundant-assignment
- exclude:
id: js/useless-assignment-to-local
query-filters:
- exclude:
id: js/redundant-assignment
- exclude:
id: js/useless-assignment-to-local
Pour rechercher l’ID d’une requête, vous pouvez cliquer sur l’alerte dans la liste des alertes sous l’onglet Security . La page des détails de l’alerte s’ouvre. Le champ Rule ID contient l’ID de requête. Pour plus d’informations sur la page des détails de l’alerte, consultez À propos des alertes d’analyse du code.
Conseil
- L’ordre des filtres est important. La première instruction de filtre qui apparaît après les instructions relatives aux requêtes et les packs de requêtes détermine si les requêtes sont incluses ou exclues par défaut.
- Les instructions suivantes sont exécutées dans l’ordre et les instructions qui apparaissent plus tard dans le fichier sont prioritaires sur les instructions précédentes.
Vous trouverez un autre exemple illustrant l’utilisation de ces filtres dans la section Exemples de fichiers de configuration.
Pour plus d’informations sur l’utilisation des filtres exclude et include dans votre fichier de configuration personnalisé, consultez Création de suites de requêtes CodeQL. Pour plus d’informations sur les métadonnées de requête sur lesquelles vous pouvez définir un filtre, consultez Métadonnées des requêtes CodeQL.
Spécification des répertoires à analyser
Lorsque les bases de code sont analysées sans générer le code, vous pouvez restreindre code scanning les fichiers dans des répertoires spécifiques en ajoutant un paths tableau au fichier de configuration. Vous pouvez également exclure les fichiers de répertoires spécifiques de l’analyse en ajoutant un tableau paths-ignore. Vous pouvez utiliser cette option lorsque vous exécutez les CodeQL actions sur un langage interprété (Python, Ruby et JavaScript/TypeScript) ou lorsque vous analysez un langage compilé sans générer le code (actuellement pris en charge pour C# et Java).
paths: - src paths-ignore: - src/node_modules - '**/*.test.js'
paths:
- src
paths-ignore:
- src/node_modules
- '**/*.test.js'
Remarque
- Les mots clés
pathsetpaths-ignore, utilisés dans le contexte de code scanning fichier de configuration, à ne pas être confondus avec ces mêmes mots-clés lorsqu'ils sont utilisés pouron.<push|pull_request>.pathsdans un flux de travail. Lorsqu’ils sont utilisés pour modifieron.<push|pull_request>dans un workflow, ils déterminent si les actions sont exécutées lorsqu’un utilisateur modifie le code dans les répertoires spécifiés. Pour plus d’informations, consultez « Syntaxe de flux de travail pour GitHub Actions ». - Les caractères de motif de filtre
?,+,[,]et!ne sont pas pris en charge et seront pris en compte littéralement. -
Les caractères `**` ne peuvent être qu’au début ou à la fin d’une ligne, ou placés entre barres obliques, et vous ne pouvez pas mélanger `**` et autres caractères. Par exemple, `foo/**`, `**/foo` et `foo/**/bar` sont des syntaxes autorisées, mais `**foo` ne l'est pas. Toutefois, vous pouvez utiliser des étoiles uniques avec d’autres caractères, comme indiqué dans l’exemple. Vous devez utiliser des guillemets pour tout ce qui contient un caractère `*`.
Pour l’analyse où le code est généré, si vous souhaitez limiter code scanning des répertoires spécifiques dans votre projet, vous devez spécifier les étapes de génération appropriées dans le flux de travail. Les commandes que vous devez utiliser pour exclure un répertoire de la génération dépendent de votre système de génération. Pour plus d’informations, consultez « Analyse CodeQL pour les langages compilés ».
Vous pouvez analyser rapidement de petites parties d’un référentiel lorsque vous modifiez du code dans des répertoires spécifiques. Vous devez à la fois exclure des répertoires dans vos étapes de génération et utiliser les mots clés paths-ignore et paths pour on.<push|pull_request> dans votre workflow.
Exemples de fichiers de configuration
Ce fichier config ajoute la suite de requêtes security-and-quality à la liste des requêtes exécutées par CodeQL au moment de l’analyse de votre code. Pour plus d’informations sur les suites de requêtes disponibles pour une utilisation, consultez Requêtes non par défaut.
name: "My CodeQL config"
queries:
- uses: security-and-quality
Le fichier config suivant désactive les requêtes par défaut et spécifie un ensemble de requêtes personnalisées à exécuter à la place. Il configure également CodeQL pour analyser les fichiers du répertoire src (par rapport à la racine), à l’exception du répertoire src/node_modules et des fichiers dont le nom finit par .test.js. Les fichiers présents dans src/node_modules et les fichiers dont le nom finit par .test.js sont donc exclus de l’analyse.
name: "My CodeQL config"
disable-default-queries: true
queries:
- name: Use an in-repository CodeQL pack (run queries in the my-queries directory)
uses: ./my-queries
- name: Use an external JavaScript CodeQL pack (run queries from an external repo)
uses: octo-org/javascript-codeql-pack@main
- name: Use an external query (run a single query from an external CodeQL pack)
uses: octo-org/python-codeql-pack/show_ifs.ql@main
- name: Use a query suite file (run queries from a query suite in this repo)
uses: ./codeql-packs/complex-python-codeql-pack/rootAndBar.qls
paths:
- src
paths-ignore:
- src/node_modules
- '**/*.test.js'
Le fichier de configuration suivant exécute uniquement les requêtes qui génèrent des alertes dont le niveau de gravité est Erreur. La configuration sélectionne d’abord toutes les requêtes par défaut, toutes les requêtes dans ./my-queries et la suite par défaut dans codeql/java-queries, puis elle exclut toutes les requêtes qui génèrent des avertissements ou des recommandations.
queries:
- name: Use an in-repository CodeQL query pack (run queries in the my-queries directory)
uses: ./my-queries
packs:
- codeql/java-queries
query-filters:
- exclude:
problem.severity:
- warning
- recommendation
Détails de la configuration
Si vous préférez spécifier des détails de configuration supplémentaires dans le fichier de flux de travail, vous pouvez utiliser l’entrée config de la commande init de l’action CodeQL. La valeur de cette entrée doit être une chaîne YAML qui suit le format de fichier de configuration documenté dans les fichiers de configuration personnalisés ci-dessus.
Exemple de configuration
Cette étape d’un GitHub Actions fichier de flux de travail utilise une config entrée pour désactiver les requêtes par défaut, ajouter la security-extended suite de requêtes et exclure les requêtes avec lesquelles elles sont marquées cwe-020.
- uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
config: |
disable-default-queries: true
threat-models: local
queries:
- uses: security-extended
query-filters:
- exclude:
tags: /cwe-020/
Vous pouvez utiliser la même approche pour spécifier toutes les options de configuration valides dans le fichier de workflow.
Conseil
Vous pouvez partager une configuration entre plusieurs référentiels à l’aide de GitHub Actions variables. L’un des avantages de cette approche est que vous pouvez mettre à jour la configuration dans un emplacement unique sans modifier le fichier de workflow.
Dans l’exemple suivant, vars.CODEQL_CONF est une GitHub Actions variable. Sa valeur peut être le contenu de n’importe quel fichier de configuration valide. Pour plus d’informations, consultez « Stocker des informations dans des variables ».
- uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
config: ${{ vars.CODEQL_CONF }}
Langues compilées
Pour les langages compilés, vous pouvez décider de la façon dont l’action CodeQL crée une base de données à des fins d’analyse CodeQL . Pour obtenir des informations sur les options de build disponibles, consultez Analyse CodeQL pour les langages compilés.
Chargement de données
GitHub peut afficher des données d’analyse du code générées en externe par un outil tiers. Vous pouvez charger les données d’analyse du code avec l’action `upload-sarif`. Pour plus d’informations, consultez « [AUTOTITLE](/code-security/code-scanning/integrating-with-code-scanning/uploading-a-sarif-file-to-github) ».