{"meta":{"title":"Personnalisation de l’analyse avec des packs CodeQL","intro":"Vous pouvez utiliser des packs CodeQL pour exécuter des requêtes CodeQL gérées par d’autres personnes ou pour partager des requêtes CodeQL que vous avez développées.","product":"Sécurité et qualité du code","breadcrumbs":[{"href":"/fr/code-security","title":"Sécurité et qualité du code"},{"href":"/fr/code-security/tutorials","title":"Tutorials"},{"href":"/fr/code-security/tutorials/customize-code-scanning","title":"Personnaliser l’analyse du code"},{"href":"/fr/code-security/tutorials/customize-code-scanning/customizing-analysis-with-codeql-packs","title":"Personnalisation de l’analyse"}],"documentType":"article"},"body":"# Personnalisation de l’analyse avec des packs CodeQL\n\nVous pouvez utiliser des packs CodeQL pour exécuter des requêtes CodeQL gérées par d’autres personnes ou pour partager des requêtes CodeQL que vous avez développées.\n\nVous pouvez personnaliser votre analyse CodeQL en téléchargeant des packs créés par d'autres utilisateurs et en les exécutant sur votre codebase. Pour plus d’informations, consultez « [Packs de requêtes CodeQL](/fr/code-security/concepts/code-scanning/codeql/codeql-query-packs) ».\n\n## Téléchargement et utilisation de packs de requêtes CodeQL\n\nAvant de pouvoir utiliser un pack de requêtes CodeQL pour analyser une base de données, vous devez télécharger tous les packages dont vous avez besoin à partir du GitHub Container registry. Cela peut être fait en utilisant l’indicateur `--download` dans la commande `codeql database analyze` ou en exécutant `codeql pack download`. Si un package n’est pas disponible publiquement, vous devez utiliser une GitHub App ou un personal access token pour vous authentifier. Pour plus d’informations et obtenir un exemple, consultez [Chargement des résultats d’analyse CodeQL dans GitHub](/fr/code-security/codeql-cli/getting-started-with-the-codeql-cli/uploading-codeql-analysis-results-to-github#uploading-results-to-github).\n\n| Choix                                                                              |                                                                                                                                                                                                            Obligatoire                                                                                                                                                                                                           | Usage                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |\n| ---------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| <code><span style=\"white-space: nowrap;\">\\<scope/name\\@version:path></span></code> |                                                      <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-check\" aria-label=\"Required\" role=\"img\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg>                                                     | Spécifiez l’étendue et le nom d’un ou plusieurs packs de requêtes CodeQL à télécharger en utilisant une liste séparée par des virgules. Si vous le souhaitez, incluez la version à télécharger et décompresser. Par défaut, la dernière version de ce pack est téléchargée. Si vous le souhaitez, incluez un chemin d’accès à une requête, un répertoire ou une suite de requêtes à exécuter. Si aucun chemin d’accès n’est inclus, exécutez les requêtes par défaut de ce pack. |\n| <code><span style=\"white-space: nowrap;\">--github-auth-stdin</span></code>         | <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-x\" aria-label=\" Optional \" role=\"img\"><path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path></svg> | Passer à l’interface CLI la GitHub App ou le personal access token créé pour l’authentification avec l’API REST de GitHub depuis le magasin de secrets via une entrée standard. Cette option n’est pas nécessaire si la commande a accès à une variable d’environnement `GITHUB_TOKEN` définie avec ce jeton.                                                                                                                                                                    |\n\n> \\[!NOTE]\n> Si vous spécifiez une version particulière d’un pack de requêtes à utiliser, notez qu’elle peut devenir trop ancienne pour une utilisation efficace de la version la plus récente de CodeQL. Pour garantir des performances optimales, si vous devez spécifier des versions précises du pack de requêtes, vous devez les réévaluer chaque fois que vous mettez à niveau l’interface CLI de CodeQL CLI que vous utilisez.\n>\n> Pour plus d’informations sur la compatibilité des packs, consultez [Informations de référence sur les packs de requêtes CodeQL](/fr/code-security/reference/code-scanning/codeql/codeql-cli/codeql-query-packs#codeql-pack-compatibility).\n\n### Exemple simple de téléchargement et d’utilisation de packs de requêtes\n\nCet exemple exécute la commande `codeql database analyze` avec l’option `--download` pour :\n\n1. Télécharger la dernière version du pack `octo-org/security-queries`.\n2. Télécharger une version du pack `octo-org/optional-security-queries`*compatible* avec la version 1.0.1 (dans ce cas, la version 1.0.2). Pour plus d’informations sur la compatibilité avec semver, consultez la [documentation sur la plage de versions sémantiques de npm](https://github.com/npm/node-semver#ranges).\n3. Exécuter toutes les requêtes par défaut dans `octo-org/security-queries`.\n4. Exécuter uniquement la requête `queries/csrf.ql` à partir de `octo-org/optional-security-queries`\n\n```shell\n$ echo $OCTO-ORG_ACCESS_TOKEN | codeql database analyze --download /codeql-dbs/example-repo \\\n    octo-org/security-queries \\\n    octo-org/optional-security-queries@~1.0.1:queries/csrf.ql \\\n    --format=sarif-latest --output=/temp/example-repo-js.sarif\n\n> Download location: /Users/mona/.codeql/packages\n> Installed fresh octo-org/security-queries@1.0.0\n> Installed fresh octo-org/optional-security-queries@1.0.2\n> Running queries.\n> Compiling query plan for /Users/mona/.codeql/packages/octo-org/security-queries/1.0.0/potential-sql-injection.ql.\n> [1/2] Found in cache: /Users/mona/.codeql/packages/octo-org/security-queries/1.0.0/potential-sql-injection.ql.\n> Starting evaluation of octo-org/security-queries/query1.ql.\n> Compiling query plan for /Users/mona/.codeql/packages/octo-org/optional-security-queries/1.0.2/queries/csrf.ql.\n> [2/2] Found in cache: /Users/mona/.codeql/packages/octo-org/optional-security-queries/1.0.2/queries/csrf.ql.\n> Starting evaluation of octo-org/optional-security-queries/queries/csrf.ql.\n> [2/2 eval 694ms] Evaluation done; writing results to octo-org/security-queries/query1.bqrs.\n> Shutting down query evaluator.\n> Interpreting results.\n```\n\n### Téléchargement direct de packs CodeQL\n\nSi vous souhaitez télécharger un pack CodeQL sans l’exécuter immédiatement, vous pouvez utiliser la commande `codeql pack download`. Cela est utile si vous souhaitez éviter d’accéder à Internet lors de l’exécution de requêtes CodeQL. Lorsque vous exécutez l’analyse CodeQL, vous pouvez spécifier des packs, des versions et des chemins d’accès de la même façon que dans l’exemple précédent :\n\n```shell\necho $OCTO-ORG_ACCESS_TOKEN | codeql pack download <scope/name@version:path> <scope/name@version:path> ...\n```\n\n### Téléchargement des packs CodeQL à partir de plusieurs registres de conteneurs GitHub\n\nSi vos packs CodeQL se trouvent sur plusieurs registres de conteneurs, vous devez indiquer à CodeQL CLI où trouver chaque pack. Pour plus d’informations, consultez « [Options de configuration de flux de travail pour l’analyse du code](/fr/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#downloading-codeql-packs-from-github-enterprise-server) ».\n\n## Spécification des requêtes à exécuter dans un pack CodeQL\n\nLes spécificateurs de requêtes sont utilisés par `codeql database analyze` et d’autres commandes qui opèrent sur un ensemble de requêtes.\nLa forme complète d’un spécificateur de requête est `scope/name@range:path`, où :\n\n* `scope/name` est le nom qualifié d’un pack CodeQL.\n* `range` est une [plage semver](https://docs.npmjs.com/cli/v6/using-npm/semver#ranges).\n* `path` est un chemin de système de fichiers vers une requête unique, un répertoire contenant des requêtes ou un fichier de suite de requêtes.\n\nLorsque vous spécifiez un `scope/name`, `range` et `path` sont facultatifs. Si vous omettez une `range`, la dernière version du pack spécifié est utilisée. Si vous omettez un `path`, la suite de requêtes par défaut du pack spécifié est utilisée.\n\n```\n          `path` peut être au choix : un fichier de requête `.ql`, un répertoire contenant une ou plusieurs requêtes ou un fichier de suite de requêtes `.qls`. Si vous omettez un nom de pack, vous devez fournir un `path`, qui sera interprété en fonction du répertoire de travail du processus en cours. Les modèles glob ne sont pas pris en charge.\n```\n\nSi vous spécifiez à la fois un `scope/name` et un `path`, le `path` ne peut pas être absolu. Il est considéré comme relatif à la racine du pack CodeQL.\n\n### Exemples de spécificateurs de requêtes\n\n* `codeql/python-queries` - Toutes les requêtes de la suite de requêtes par défaut de la version la plus récente du pack `codeql/python-queries`.\n\n* `codeql/python-queries@1.2.3` - Toutes les requêtes de la suite de requêtes par défaut de la version `1.2.3` du pack `codeql/python-queries`.\n\n* `codeql/python-queries@~1.2.3` - Toutes les requêtes de la suite de requêtes par défaut de la version la plus récente du pack `codeql/python-queries` qui est >= `1.2.3` et < `1.3.0`.\n\n* `codeql/python-queries:Functions` - Toutes les requêtes du répertoire `Functions` dans la version la plus récente du pack `codeql/python-queries`.\n\n* `codeql/python-queries@1.2.3:Functions` - Toutes les requêtes du répertoire `Functions` dans la version 1.2.3 du pack `codeql/python-queries`.\n\n* `codeql/python-queries@1.2.3:codeql-suites/python-code-scanning.qls` - Toutes les requêtes du répertoire `codeql-suites/python-code-scanning.qls` dans la version 1.2.3 du pack `codeql/python-queries`.\n\n* `suites/my-suite.qls` - Toutes les requêtes du fichier `suites/my-suite.qls` relatives au répertoire de travail actuel.\n\n> \\[!TIP]\n> La suite de requêtes par défaut des packs de requêtes standard CodeQL est `codeql-suites/<lang>-code-scanning.qls`. Vous trouverez également plusieurs autres suites de requêtes utiles dans le répertoire `codeql-suites` de chaque pack. Par exemple, le pack `codeql/cpp-queries` contient les suites de requêtes suivantes :\n>\n> *\n\n```\n          `cpp-code-scanning.qls` - Requêtes d’analyse de code standard pour C++. Suite de requêtes par défaut pour ce pack.\n```\n\n> *\n\n```\n          `cpp-security-extended.qls` - Requêtes de la suite `cpp-code-scanning.qls` par défaut pour C++, plus des requêtes de gravité et de précision moindres.\n```\n\n> *\n\n```\n          `cpp-security-and-quality.qls` - Requêtes de `cpp-security-extended.qls`, plus des requêtes de maintenabilité et de fiabilité.\n```\n\n> Vous pouvez voir les sources de ces suites de requêtes dans le [dépôt CodeQL](https://github.com/github/codeql/tree/main/cpp/ql/src/codeql-suites). Les suites de requêtes pour les autres langages sont similaires.\n\n## Utilisation de packs de modèles pour analyser les appels aux dépendances personnalisées\n\nVous pouvez inclure les packs de modèles publiés dans une analyse code scanning avec l'option `--model-packs`. Par exemple:\n\n```shell\n$ codeql database analyze /codeql-dbs/my-company --format=sarif-latest \\\n  --model-packs my-repo/my-java-model-pack \\\n  --output=/temp/my-company.sarif codeql/java-queries\n```\n\nDans cet exemple, les requêtes pertinentes du pack de requêtes standard `codeql/java-queries` utilisent les informations sur les dépendances du pack de modèles, `my-repo/my-java-model-pack`, pour vérifier les vulnérabilités du code qui fait appel à ces dépendances.\n\nVous pouvez spécifier plusieurs packs de modèles publiés dans une analyse.\n\nPour plus d'informations sur l'écriture de vos propres packs de modèles, consultez [Création et utilisation de packs CodeQL](/fr/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/creating-and-working-with-codeql-packs#creating-a-model-pack).\n\n### À propos des packages publiés\n\nQuand un pack est publié pour une utilisation dans des analyses, la commande `codeql pack create` ou `codeql pack publish` vérifie que le contenu est complet et y ajoute des éléments de contenu supplémentaires :\n\n* Pour un pack de requêtes, une copie de chacun des packs de bibliothèques dont il dépend, dans les versions précises avec lesquelles il a été développé. Les utilisateurs du pack de requêtes n’auront pas besoin de télécharger ces packs de bibliothèques séparément.\n\n* Pour un pack de requêtes, les représentations précompilées de chacune des requêtes. Elles sont plus rapides à exécuter que s’il fallait compiler la source QL pour la requête à chaque analyse.\n\nLa plupart de ces données se trouvent dans un répertoire nommé `.codeql` dans le pack publié, mais les requêtes précompilées se trouvent dans des fichiers avec un suffixe `.qlx` avec la source `.ql` pour chaque requête. Durant l’analyse d’une base de données avec une requête d’un pack publié, CodeQL charge ces fichiers au lieu de la source `.ql`. Si vous devez modifier le contenu d’un pack *publié*, veillez à supprimer tous les fichiers `.qlx`, car ils peuvent empêcher les modifications apportées aux fichiers `.ql` de prendre effet."}