共用方式為


搭配 CodeQL 使用自訂查詢

根據預設,如果您未在管線設定中指定自定義元件檔,CodeQL 會 security-extended 執行查詢套件來分析您的程式代碼。 您可以使用自訂 CodeQL 查詢來撰寫自己的查詢,以尋找特定的弱點和錯誤。 您也需要建立自定義組態檔來修改 CodeQL 的預設分析。

若要尋找現有的自定義查詢或參與您自己的自定義查詢,請參閱 參與 CodeQL

使用自訂查詢進行分析

開始使用自定義查詢的最快方式是撰寫查詢,並將它儲存在本機 Azure DevOps 存放庫中。 您可以根據您的需求自定義自定義查詢的詳細數據,但至少必須有規則標識碼。 如需如何撰寫您自己的 CodeQL 查詢的詳細資訊,請參閱 撰寫 CodeQL 查詢。 您也可以將多個查詢組合在查詢套件中,或利用其他人發佈的套件。 如需詳細資訊,請參閱 發佈和使用CodeQL套件

使用自訂組態檔

自定義組態檔是管理程式碼分析程式碼期間所執行查詢的方法。 您可以指定要執行的更多查詢或查詢套件,以及變更或停用預設 CodeQL 查詢。

若要包含您想要包含的特定查詢,請使用查詢檔案 (.ql) 在存放庫中的位置名稱和路徑來指定查詢。

若要包含您想要包含的特定套件,請指定套件名稱。 您可以指定要在元件執行的任意數目 CodeQL 查詢套件。

下一個步驟是建立 qlpack.yml 檔案。 此檔案會宣告 CodeQL 套件及其相關信息。 與 *.ql 相同目錄 (或子目錄) qlpack.yml 中的任何檔案都會被視為套件的一部分。

提示

設定檔中的 packs 篩選支援從 GitHub 中裝載的存放庫下載套件,但 queries 篩選則不支援。 如果套件在 GitHub 中是私用的,則您必須透過工作提供 GitHub 存取權杖 AdvancedSecurity-Codeql-Init@1 做為環境變數,並將變數名稱作為 GITHUB_TOKEN,令牌的範圍為 read:packages

以下為範例設定檔:

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

提示

組態檔規格會忽略並優先於工作的 AdvancedSecurity-Codeql-Init@1 管線層級設定。 includepaths / ignorepaths將會忽略,如果paths/paths-ignore存在,則會以的值覆寫 。paths/paths-ignore querysuite將會以組態檔中指定的queriespacks值覆寫。

如果您使用任何自訂查詢,以下是放置在自訂查詢目錄中的範例 qlpack.yml

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

變數 dependencies 包含此套件及其相容版本範圍的所有相依性。 每個相依性都會參考為 scope/name CodeQL 連結庫套件的 。 定義 dependencies時,您的 qlpack.yml 相依於其中一個核心語言套件(例如 JavaScript、C#、Ruby 等),以決定查詢可以分析的語言。

如需組態檔的更具體建議和組態選項,請參閱 針對程式代碼掃描qlpack.yml 設定自定義進階設定,請參閱 CodeQL 套件結構

設定好組態檔之後,您必須自定義執行 CodeQL 分析的管線,以利用您的新檔案。 以下是指向組態檔的範例管線:

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