Ă propos des requĂȘtes personnalisĂ©es et de CodeQL CLI
Vous pouvez personnaliser vos analyses CodeQL en Ă©crivant vos propres requĂȘtes pour mettre en Ă©vidence des vulnĂ©rabilitĂ©s ou des erreurs spĂ©cifiques.
Cette rubrique concerne spĂ©cifiquement lâĂ©criture de requĂȘtes Ă utiliser avec la commande database analyze pour produire des rĂ©sultats interprĂ©tĂ©s.
Remarque
Les requĂȘtes exĂ©cutĂ©es avec database analyze
ont des exigences de mĂ©tadonnĂ©es strictes. Vous pouvez Ă©galement exĂ©cuter des requĂȘtes Ă lâaide des sous-commandes de niveau plomberie suivantes :
- database run-queries, qui génÚre des résultats non interprétés dans un format binaire intermédiaire appelé BQRS.
- query run, qui gĂ©nĂšre des fichiers BQRS ou affiche les tables de rĂ©sultats directement dans la ligne de commande. Lâaffichage des rĂ©sultats directement dans la ligne de commande peut ĂȘtre utile pour le dĂ©veloppement de requĂȘtes itĂ©ratives Ă lâaide de lâinterface CLI.
Les requĂȘtes exĂ©cutĂ©es avec ces commandes nâont pas les mĂȘmes exigences de mĂ©tadonnĂ©es. Toutefois, pour enregistrer des donnĂ©es lisibles par lâhomme, vous devez traiter chaque fichier de rĂ©sultats BQRS avec la sous-commande de plomberie bqrs decode. Par consĂ©quent, dans la plupart des cas dâusage, il est plus simple dâutiliser lâanalyse de base de donnĂ©es (database analyze) pour gĂ©nĂ©rer directement des rĂ©sultats interprĂ©tĂ©s.
Ăcriture dâune requĂȘte valide
Avant dâexĂ©cuter une analyse personnalisĂ©e, vous devez Ă©crire une requĂȘte valide et lâenregistrer dans un fichier avec une extension .ql
. Une documentation complĂšte est disponible pour vous aider Ă Ă©crire des requĂȘtes. Pour plus dâinformations, consultez RequĂȘtes CodeQL.
Inclusion des mĂ©tadonnĂ©es de requĂȘte
Les mĂ©tadonnĂ©es de requĂȘte sont incluses en haut de chaque fichier de requĂȘte. Elles fournissent aux utilisateurs des informations sur la requĂȘte et indique Ă CodeQL CLI comment traiter les rĂ©sultats de la requĂȘte.
Lors de lâexĂ©cution de requĂȘtes avec la commande database analyze
, vous devez inclure les deux propriétés suivantes pour garantir que les résultats sont interprétés correctement :
-
Identificateur de requĂȘte (
@id
) : séquence de mots composés de lettres minuscules ou de chiffres, délimités par/
ou par-
, identifiant et classifiant la requĂȘte. -
Type de requĂȘte (
@kind
) : identifie la requĂȘte comme une alerte simple (@kind problem
), une alerte documentĂ©e par une sĂ©quence dâemplacements de code (@kind path-problem
), pour la rĂ©solution des problĂšmes de lâextracteur (@kind diagnostic
) ou une métrique récapitulative (@kind metric
et@tags summary
).
Pour plus dâinformations sur ces propriĂ©tĂ©s de mĂ©tadonnĂ©es, consultez MĂ©tadonnĂ©es pour les requĂȘtes CodeQL et Guide de style pour les mĂ©tadonnĂ©es de requĂȘte.
Remarque
Les exigences en matiĂšre de mĂ©tadonnĂ©es peuvent diffĂ©rer si vous voulez utiliser votre requĂȘte avec dâautres applications. Pour plus dâinformations, consultez MĂ©tadonnĂ©es pour les requĂȘtes CodeQL.
Empaquetage de requĂȘtes QL personnalisĂ©es
Quand vous Ă©crivez vos propres requĂȘtes avec lâintention de les partager avec dâautres personnes, vous devez les enregistrer dans un pack CodeQL personnalisĂ©. Vous pouvez publier le pack en tant que pack CodeQL sur GitHub Packages - le Container registry GitHub. Pour plus dâinformations, consultez « Personnalisation de lâanalyse avec des packs CodeQL ».
Les packs CodeQL organisent les fichiers utilisĂ©s dans lâanalyse CodeQL et peuvent stocker des requĂȘtes, des fichiers de bibliothĂšque, des suites de requĂȘtes et des mĂ©tadonnĂ©es importantes. Leur rĂ©pertoire racine doit contenir un fichier nommĂ© qlpack.yml
. Vos requĂȘtes personnalisĂ©es doivent ĂȘtre enregistrĂ©es Ă la racine du pack CodeQL ou dans ses sous-rĂ©pertoires.
Pour chaque pack CodeQL, le fichier qlpack.yml
inclut des informations qui indiquent Ă CodeQL CLI comment compiler les requĂȘtes, de quels autres packs et bibliothĂšques CodeQL dĂ©pend le pack, et oĂč trouver les dĂ©finitions de suite de requĂȘtes. Pour plus dâinformations sur ce quâil faut inclure dans ce fichier, consultez Personnalisation de lâanalyse avec des packs CodeQL.
Inclusion dâune aide aux requĂȘtes pour les requĂȘtes CodeQL personnalisĂ©es dans les fichiers SARIF
Si vous utilisez CodeQL CLI pour exĂ©cuter des analyses de code sur des systĂšmes CI/CD tiers, vous pouvez inclure lâaide aux requĂȘtes pour vos requĂȘtes personnalisĂ©es dans les fichiers SARIF gĂ©nĂ©rĂ©s lors dâune analyse. AprĂšs avoir chargĂ© le fichier SARIF dans GitHub, lâaide aux requĂȘtes sâaffiche dans lâinterface utilisateur de lâanalyse du code pour toutes les alertes gĂ©nĂ©rĂ©es par les requĂȘtes personnalisĂ©es.
Ă partir de CodeQL CLI version 2.7.1 et ultĂ©rieure, vous pouvez inclure lâaide aux requĂȘtes restituĂ©e au format Markdown dans les fichiers SARIF en fournissant lâoption --sarif-add-query-help
lors de lâexĂ©cution de codeql database analyze
.
Vous pouvez Ă©crire une aide aux requĂȘtes pour les requĂȘtes personnalisĂ©es directement dans un fichier Markdown et lâenregistrer en mĂȘme temps que la requĂȘte correspondante. Par souci de cohĂ©rence avec les requĂȘtes CodeQL standard, vous pouvez aussi Ă©crire une aide aux requĂȘtes au format .qhelp
. Lâaide aux requĂȘtes Ă©crite dans les fichiers .qhelp
ne peut pas ĂȘtre incluse dans les fichiers SARIF et ne peut pas ĂȘtre traitĂ©e par lâanalyse du code, elle doit par consĂ©quent ĂȘtre convertie au format Markdown avant dâexĂ©cuter lâanalyse. Pour plus dâinformations, consultez Fichiers dâaide aux requĂȘtes et Test des fichiers dâaide aux requĂȘtes.
Contribution au dépÎt CodeQL
Si vous voulez partager votre requĂȘte avec dâautres utilisateurs CodeQL, vous pouvez ouvrir une demande de tirage dans le dĂ©pĂŽt CodeQL. Pour plus dâinformations, consultez Contribution Ă CodeQL.