Använda anpassade frågor med CodeQL
Om du inte har angett någon anpassad konfigurationsfil i pipelinekonfigurationen security-extended
kör CodeQL som standard frågepaketet för att analysera koden. Du kan använda anpassade CodeQL-frågor för att skriva egna frågor för att hitta specifika säkerhetsrisker och fel. Du måste också skapa en anpassad konfigurationsfil för att ändra CodeQL:s standardanalys.
Information om hur du hittar befintliga anpassade frågor eller bidrar med din egen anpassade fråga finns i Bidra till CodeQL.
Analys med anpassade frågor
Det snabbaste sättet att börja med en anpassad fråga är att skriva en fråga och spara den på din lokala Azure DevOps-lagringsplats. Du kan anpassa information om en anpassad fråga efter behov, men den måste ha minst ett regel-ID. Mer information om hur du skriver en egen CodeQL-fråga finns i Skriva CodeQL-frågor. Du kan också paketera flera frågor i en frågesvit eller använda paket som publicerats av andra personer. Mer information finns i Publicera och använda CodeQL-paket.
Använda en anpassad konfigurationsfil
En anpassad konfigurationsfil är ett sätt att hantera vilka frågor som körs under CodeQL:s analys mot din kod. Du kan ange fler frågor eller frågepaket som ska köras och ändra eller inaktivera standardfrågorna för CodeQL.
Om du vill inkludera en specifik fråga som du vill inkludera anger du frågan med ett namn och en sökväg till platsen för frågefilen (.ql) på lagringsplatsen.
Om du vill inkludera ett specifikt paket som du vill inkludera anger du paketnamnet. Du kan ange valfritt antal CodeQL-frågepaket som ska köras i konfigurationsfilen.
Nästa steg är att skapa en qlpack.yml
fil. Den här filen deklarerar CodeQL-paketet och information om det. Alla *.ql
filer i samma katalog (eller underkatalog) som en betraktas som en qlpack.yml
del av paketet.
Dricks
packs
Filtret från konfigurationsfilen stöder nedladdning av paket från lagringsplatser som finns i GitHub, även om queries
filtret inte gör det.
Om paketet är privat i GitHub måste du ange en GitHub-åtkomsttoken via AdvancedSecurity-Codeql-Init@1
uppgiften som en miljövariabel och variabelnamn som GITHUB_TOKEN
, med tokenomfånget read:packages
som .
Här är ett exempel på en konfigurationsfil:
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
Dricks
Konfigurationsfilspecifikationer ignorerar och har företräde framför konfigurationer på pipelinenivå för AdvancedSecurity-Codeql-Init@1
uppgiften.
includepaths
/ ignorepaths
ignoreras eller, om paths
/paths-ignore
det finns, skrivs över med värden från .paths
/paths-ignore
querysuite
skrivs över med värden som anges i queries
eller packs
i konfigurationsfilen.
Om du använder en anpassad fråga finns här ett exempel qlpack.yml
i katalogen för dina anpassade frågor:
version: 1.0.1
dependencies:
codeql/javascript-all: "*"
codeql/javascript-queries: "*"
Variabeln dependencies
innehåller alla beroenden för det här paketet och deras kompatibla versionsintervall. Varje beroende refereras till som scope/name
ett CodeQL-bibliotekspaket. När du definierar dependencies
beror din qlpack.yml
på exakt ett av de viktigaste språkpaketen (till exempel JavaScript, C#, Ruby osv.), som avgör vilket språk frågan kan analysera.
Mer specifika råd och konfigurationsalternativ med konfigurationsfilen finns i Anpassa den avancerade konfigurationen för kodgenomsökning eller konfiguration qlpack.yml
i CodeQL-paketstrukturen.
När du har din konfigurationsfil måste du sedan anpassa pipelinen som kör CodeQL-analys för att använda den nya filen. Här är en exempelpipeline som pekar på en konfigurationsfil:
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