Použití vlastních dotazů s CodeQL

Pokud ve výchozím nastavení nemáte zadaný vlastní konfigurační soubor, CodeQL spustí security-extended balíček dotazů k analýze kódu. Vlastní dotazy CodeQL můžete využít k zápisu vlastních dotazů, abyste našli konkrétní chyby zabezpečení a chyby. Musíte také vytvořit vlastní konfigurační soubor pro úpravu výchozí analýzy CodeQL.

Pokud chcete najít existující vlastní dotazy nebo přispívat vlastním dotazem, přečtěte si téma Přispívání do CodeQL.

Analýza s využitím vlastních dotazů

Nejrychlejší způsob, jak začít s vlastním dotazem, je napsat dotaz a uložit ho do místního úložiště Azure DevOps. Podrobnosti vlastního dotazu můžete přizpůsobit podle potřeby, ale musí mít aspoň ID pravidla. Další informace o tom, jak napsat vlastní dotaz CodeQL, naleznete v tématu Psaní dotazů CodeQL. Do sady dotazů můžete také seskupit několik dotazů nebo využít balíčky publikované jinými lidmi. Další informace najdete v tématu Publikování a používání balíčků CodeQL.

Použití vlastního konfiguračního souboru

Vlastní konfigurační soubor je způsob, jak spravovat dotazy, které se spouštějí během analýzy CodeQL s vaším kódem. Můžete zadat více dotazů nebo balíčků dotazů, které se mají spustit, a změnit nebo zakázat výchozí dotazy CodeQL.

Pokud chcete zahrnout konkrétní dotaz, který chcete zahrnout, zadejte dotaz s názvem a cestou k umístění souboru dotazu (.ql) v úložišti.

Pokud chcete zahrnout konkrétní balíček, který chcete zahrnout, zadejte název balíčku. Můžete zadat libovolný počet balíčků dotazů CodeQL, které se mají spustit v konfiguračním souboru.

Dalším krokem je vytvoření qlpack.yml souboru. Tento soubor deklaruje balíček CodeQL a informace o něm. Všechny *.ql soubory ve stejném adresáři (nebo podadresáři) jako součást qlpack.yml balíčku.

Tip

Filtr packs z konfiguračního souboru podporuje stahování balíčků z úložišť hostovaných na GitHubu, ačkoli filtr queries ho nepodporuje. Pokud je balíček privátní na GitHubu, musíte prostřednictvím úlohy zadat přístupový token AdvancedSecurity-Codeql-Init@1 GitHubu jako proměnnou prostředí a název proměnné jako GITHUB_TOKENs oborem tokenu read:packages.

Tady je příklad konfiguračního souboru:

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

Tip

Specifikace konfiguračního souboru ignorují a mají přednost před konfiguracemi na úrovni kanálu pro AdvancedSecurity-Codeql-Init@1 úlohu. includepaths / ignorepathsbude ignorována nebo , pokud paths/paths-ignore jsou přítomny, přepsány hodnotami z .paths/paths-ignore querysuite bude přepsána hodnotami zadanými v queries konfiguračním souboru nebo packs v konfiguračním souboru.

Pokud používáte nějaký vlastní dotaz, tady je příklad qlpack.yml umístěný v adresáři vlastních dotazů:

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

Proměnná dependencies obsahuje všechny závislosti tohoto balíčku a jejich kompatibilní rozsahy verzí. Každá závislost se odkazuje jako na scope/name balíček knihovny CodeQL. Při definování dependenciesqlpack.yml závisí na přesně jedné ze základních jazykových sad (například JavaScript, C#, Ruby atd.), která určuje jazyk, který může dotaz analyzovat.

Konkrétnější rady a možnosti konfigurace s konfiguračním souborem najdete v tématu Přizpůsobení pokročilého nastavení pro kontrolu kódu nebo nastavení qlpack.yml , viz struktura balíčku CodeQL.

Jakmile budete mít konfigurační soubor, budete muset přizpůsobit svůj kanál se spuštěnou analýzou CodeQL tak, aby využíval váš nový soubor. Tady je ukázkový kanál odkazující na konfigurační soubor:

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