搭配 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
將會以組態檔中指定的queries
packs
值覆寫。
如果您使用任何自訂查詢,以下是放置在自訂查詢目錄中的範例 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