Dela via


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:packagessom .

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 / ignorepathsignoreras 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 dependenciesberor 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