The Wayback Machine - https://web.archive.org/web/20230130222929/https://docs.github.com/fr/code-security/code-scanning/codeql-cli-reference/sarif-output
Skip to main content

Sortie SARIF dans l’interface CLI de CodeQL

Vous pouvez générer une sortie SARIF à partir de CodeQL CLI et partager des résultats d’analyse statique avec d’autres systèmes.

GitHub CodeQL est concédé sous licence par utilisateur lors de l’installation. Vous pouvez utiliser CodeQL uniquement pour certaines tâches soumises aux restrictions de licence. Pour plus d’informations, consultez « À propos de la licence GitHub CodeQL ».

Si vous disposez d’un compte GitHub Enterprise et d’une licence GitHub Advanced Security, vous pouvez utiliser CodeQL pour l’analyse automatisée, l’intégration continue et la livraison continue. Vous pouvez créer un compte d’entreprise en contactant l’équipe des ventes. Pour plus d’informations, consultez « À propos de GitHub Advanced Security ».

Remarque : Cet article a été migré à partir du site web de documentation CodeQL en janvier 2023.

À propos de la sortie SARIF

Le format SARIF est conçu pour représenter la sortie d’un large éventail d’outils d’analyse statique et il existe de nombreuses fonctionnalités dans la spécification SARIF considérées comme « facultatives ». Ce document décrit la sortie produite lors de l’utilisation du type de format sarifv2.1.0, qui correspond à la spécification SARIF v2.1.0.csd1. Pour plus d’informations sur la sélection d’un format de fichier pour vos résultats d’analyse, consultez la commande database analyze dans la documentation de CodeQL.

Spécification et schéma SARIF

Cet article est destiné à être lu de concert avec la spécification SARIF détaillée. Pour plus d’informations sur la spécification et le schéma SARIF, consultez la documentation sur la spécification SARIF.

Notes sur les modifications

Modifications entre les versions

Version de CodeQLType de formatModifications
2.0.0sarifv2.1.0Première version de ce format.

Modifications à venir de la sortie

La sortie produite pour un type de format spécifique donné (par exemple, sarifv2.1.0) est susceptible d’être modifiée dans les versions ultérieures de CodeQL. Nous nous efforcerons de maintenir la compatibilité descendante avec les consommateurs de la sortie SARIF générée en veillant à ceci :

  • Aucun champ généré marqué comme « Toujours » ne sera supprimé.

  • Les circonstances dans lesquelles les champs « facultatifs » seront générés pourront changer. Les consommateurs de la sortie SARIF CodeQL devraient résister à la présence ou à l’absence de ces champs.

De nouveaux champs de sortie pourront être ajoutés dans les versions ultérieures sous le même type de format : ils ne seront pas considérés comme antagonistes à la compatibilité descendante, et les consommateurs devraient résister à la présence de champs nouvellement ajoutés.

De nouveaux types d’arguments de format pourront être ajoutés dans les versions à venir de CodeQL, par exemple pour prendre en charge les nouvelles versions de SARIF. Ces types n’offrent aucune garantie de compatibilité descendante, sauf indication explicite contraire.

Objets SARIF générés

Voici des informations détaillées sur chaque composant SARIF susceptible d’être généré, ainsi que toutes les éventuelles circonstances spécifiques. Nous omettons toutes les propriétés qui ne sont jamais générées.

l'objet sarifLog

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
$schemaToujoursFournit un lien vers le schéma SARIF.
versionToujoursVersion du format SARIF utilisé pour générer la sortie.
runsToujoursTableau contenant un objet d’exécution unique, pour un seul langage.

l'objet run

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
toolToujours
originalUriBaseIdsToujoursDictionnaire des uriBaseIds avec les artifactLocations représentant les emplacements d’origine sur la machine d’analyse. Au minimum, ce dictionnaire contient l’uriBaseId %SRCROOT%, qui représente l’emplacement racine sur la machine d’analyse du code source pour le projet analysé. Chaque artifactLocation contient les propriétés uri et description.
artifactsToujoursTableau contenant au moins un objet d’artefact pour chaque fichier référencé dans un résultat.
resultsToujours
newLineSequencesToujours
columnKindToujours
propertiesToujoursLe dictionnaire des propriétés contient le semmle.formatSpecifier, qui identifie le spécificateur de format passé à l’CodeQL CLI.

l'objet tool

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
driverToujours

l'objet toolComponent

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
nameToujoursDéfinissez ce nom sur « Chaîne d’outils en ligne de commande CodeQL » pour une sortie provenant des outils CodeQL CLI. Notez que si la sortie a été générée à l’aide d’un autre outil, une autre propriété name est signalée et le format risque de ne pas être celui décrit ici.
organizationToujoursDéfinissez cette propriété sur « GitHub ».
versionToujoursDéfinissez cette propriété sur la version de CodeQL, par exemple « 2.0.0 ».
rulesToujoursTableau d’objets reportingDescriptor qui représentent des règles. Ce tableau contient au minimum toutes les règles exécutées pendant cette analyse, mais il peut contenir des règles qui étaient disponibles et qui n’ont pas été exécutées. Pour plus d’informations sur l’activation des requêtes, consultez defaultConfiguration.

Objet reportingDescriptor (pour une règle)

Des objets reportingDescriptor peuvent être utilisés à plusieurs endroits dans la spécification SARIF. Quand un reportingDescriptor est inclus dans le tableau de règles d’un objet toolComponent, ses propriétés sont les suivantes.

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
idToujoursContient la propriété @id spécifiée dans la requête qui définit la règle, dont le format est généralement language/rule-name (par exemple cpp/unsafe-format-string). Si votre organisation définit la propriété @opaqueid dans la requête, celle-ci est utilisée à la place.
nameToujoursContient la propriété @idspécifiée dans la requête. Pour obtenir un exemple, consultez la propriété id ci-dessus.
shortDescriptionToujoursContient la propriété @name spécifiée dans la requête qui définit la règle.
fullDescriptionToujoursContient la propriété @description spécifiée dans la requête qui définit la règle.
defaultConfigurationToujoursObjet reportingConfiguration, dont la propriété activée est définie sur true ou false et dont une propriété de niveau est définie en fonction de la propriété @severity spécifiée dans la requête qui définit la règle. Omis si la propriété @severity n’a pas été spécifiée.

l'objet artifact

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
locationToujoursObjet artifactLocation.
indexToujoursIndex de l'objet artifact.
contentsAu choixSi les résultats sont générés à l’aide de l’indicateur --sarif-add-file-contents et que le code source est disponible au moment de la génération du fichier SARIF, alors la propriété contents est renseignée avec un objet artifactContent et avec la propriété text définie.

l'objet artifactLocation

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
uriToujours
indexToujours
uriBaseIdAu choixSi le fichier est lié à un emplacement abstrait connu, comme l’emplacement source racine sur la machine d’analyse, alors cette propriété est définie.

l'objet result

La composition des résultats dépend des options fournies à CodeQL. Par défaut, les résultats sont regroupés par chaîne de format de message unique et par emplacement principal. Ainsi, deux résultats qui se produisent au même emplacement avec le même message sous-jacent apparaissent sous la forme d’un résultat unique dans la sortie. Ce comportement peut être désactivé à l’aide de l’indicateur --ungroup-results, auquel cas aucun résultat n’est regroupé.

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
ruleIdToujoursConsultez la description de la propriété id dans l’objet reportingDescriptor (pour la règle).
ruleIndexToujours
messageToujoursMessage décrivant le ou les problèmes qui se produisent à cet emplacement. Ce message peut être un « message avec espace réservé » au format SARIF, contenant des liens qui font référence à des emplacements dans la propriété relatedLocations.
locationsToujoursTableau contenant un objet location unique.
partialFingerprintsToujoursIl existe un dictionnaire des types d’empreintes digitales nommées. Celui-ci contient, au minimum, une valeur pour primaryLocationLineHash, qui fournit une empreinte digitale selon le contexte de l’emplacement principal.
codeFlowsAu choixCe tableau peut être renseigné avec un ou plusieurs objets codeFlow si la requête qui définit la règle pour ce résultat est de @kind path-problem.
relatedLocationsAu choixCe tableau est renseigné si la requête qui définit la règle pour ce résultat a un message avec des options d’espace réservé. Chaque emplacement unique est inclus une seule fois.
suppressionsAu choixSi le résultat est supprimé, alors il contient un seul objet suppression, avec la propriété @kind définie sur IN_SOURCE. Si ce résultat n’est pas supprimé, mais qu’au moins un résultat fait l’objet d’une suppression, alors il est défini sur un tableau vide ; sinon, il n’est pas défini.

l'objet location

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
physicalLocationToujours
idAu choixLes objets location qui apparaissent dans le tableau relatedLocations d’un objet result peuvent contenir la propriété id.
messageAu choixLes objets location peuvent contenir la propriété message si :

– Ils apparaissent dans le tableau relatedLocations d’un objet result pouvant contenir la propriété message.

– Ils apparaissent dans la propriété threadFlowLocation.location.

l'objet physicalLocation

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
artifactLocationToujours
regionAu choixSi le physicalLocation donné existe dans un fichier texte, comme un fichier de code source, alors la propriété region est peut-être présente.
contextRegionAu choixÉventuellement présente si cet emplacement a un snippet associé.

l'objet region

Il existe deux types d’objets region produits par CodeQL :

  • Régions de décalage de ligne/colonne

  • Régions de longueur et de décalage de caractères

Toute région produite par CodeQL peut être spécifiée dans l’un ou l’autre format, et les consommateurs doivent gérer l’un ou l’autre type de manière robuste.

Pour les régions de décalage de ligne/colonne, les propriétés suivantes sont définies :

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
startLineToujours
startColumnAu choixNon incluse si elle est égale à la valeur par défaut de 1.
endLineAu choixNon incluse si identique à startLine.
endColumnToujours
snippetAu choix

Pour les régions de longueur et de décalage de caractères, les propriétés suivantes sont définies :

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
charOffsetAu choixFournie si les propriétés startLine, startColumn, endLine et endColumn ne sont pas renseignées.
charLengthAu choixFournie si les propriétés startLine, startColumn, endLine et endColumn ne sont pas renseignées.
snippetAu choix

l'objet codeFlow

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
threadFlowsToujours

l'objet threadFlow

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
locationsToujours

l'objet threadFlowLocation

Nom de la propriété JSONQuand cette propriété est-elle générée ?Notes
locationToujours