Condividi tramite


Uso di query personalizzate con CodeQL

Per impostazione predefinita, se non è stato specificato un file di configurazione personalizzato nella configurazione della pipeline, CodeQL esegue il security-extended pacchetto di query per analizzare il codice. È possibile usare query CodeQL personalizzate per scrivere query personalizzate per individuare vulnerabilità ed errori specifici. È anche necessario creare un file di configurazione personalizzato per modificare l'analisi predefinita di CodeQL.

Per trovare query personalizzate esistenti o per contribuire alla propria query personalizzata, vedere Contributi a CodeQL.

Analisi con query personalizzate

Il modo più rapido per iniziare con una query personalizzata consiste nel scrivere una query e salvarla nel repository DevOps di Azure locale. È possibile personalizzare i dettagli di una query personalizzata in base alle esigenze, ma deve avere almeno un ID regola. Per altre informazioni su come scrivere una query CodeQL personalizzata, vedere Scrittura di query CodeQL. È anche possibile raggruppare più query in un gruppo di query o utilizzare pacchetti pubblicati da altri utenti. Per altre informazioni, vedere Pubblicazione e uso di pacchetti CodeQL.

Utilizzo di un file di configurazione personalizzato

Un file di configurazione personalizzato è un modo per gestire le query eseguite durante l'analisi di CodeQL sul codice. È possibile specificare più query o query pack da eseguire e modificare o disabilitare le query CodeQL predefinite.

Per includere una query specifica da includere, specificare la query con un nome e un percorso per il percorso del file di query (con estensione ql) nel repository.

Per includere un pacchetto specifico da includere, specificare il nome del pacchetto. È possibile specificare un numero qualsiasi di Query Pack codeQL da eseguire nel file di configurazione.

Il passaggio successivo consiste nel creare un qlpack.yml file. Questo file dichiara il pacchetto CodeQL e le informazioni su di esso. Tutti i *.ql file nella stessa directory (o sottodirectory) di un qlpack.yml vengono considerati parte del pacchetto.

Suggerimento

Il filtro packs dal file di configurazione supporta il download dei pacchetti dai repository ospitati in GitHub, anche se il filtro queries non lo fa. Se il pacchetto è privato in GitHub, è necessario fornire un token di accesso GitHub tramite l'attività AdvancedSecurity-Codeql-Init@1 come variabile di ambiente e nome di variabile come GITHUB_TOKEN, con l'ambito del token come read:packages.

Di seguito è riportato un esempio di file di configurazione.

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

Suggerimento

Le specifiche dei file di configurazione ignorano e hanno la precedenza sulle configurazioni a livello di pipeline per l'attività AdvancedSecurity-Codeql-Init@1 . includepaths / ignorepaths verrà ignorato o, se paths/paths-ignore presenti, sovrascritto con i valori di paths/paths-ignore. querysuite verrà sovrascritto con i valori specificati in queries o packs nel file di configurazione.

Se si usa una query personalizzata, di seguito è riportato un esempio qlpack.yml inserito nella directory delle query personalizzate:

version: 1.0.1
dependencies:
  codeql/javascript-all: "*"
  codeql/javascript-queries: "*"

La dependencies variabile contiene tutte le dipendenze di questo pacchetto e i relativi intervalli di versioni compatibili. A ogni dipendenza viene fatto riferimento come di scope/name un pacchetto di libreria CodeQL. Quando si definisce dependencies, dipende qlpack.yml esattamente da uno dei Language Pack principali (ad esempio, JavaScript, C#, Ruby e così via), che determina il linguaggio che la query può analizzare.

Per consigli e opzioni di configurazione più specifici con il file di configurazione, vedere Personalizzazione dell'installazione avanzata per l'analisi del codice o per qlpack.yml l'installazione, vedere Struttura del pacchetto CodeQL.

Dopo aver creato il file di configurazione, è necessario personalizzare la pipeline che esegue l'analisi CodeQL per usare il nuovo file. Ecco una pipeline di esempio che punta a un file di configurazione:

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