CodeQL でのカスタム クエリの使用
既定では、パイプラインのセットアップでカスタム構成ファイルを指定していない場合、CodeQL はコードを分析するために security-extended
クエリ パックを実行します。 カスタム CodeQL クエリを使用して独自のクエリを記述し、特定の脆弱性とエラーを見つけることができます。 また、CodeQL の既定の分析を変更するためのカスタム構成ファイルを作成する必要もあります。
既存のカスタム クエリを検索したり、独自のカスタム クエリを投稿したりするには、「CodeQL に投稿する」を参照してください。
カスタム クエリを使用した分析
カスタム クエリから始める最も簡単な方法は、クエリを記述し、ローカルの Azure DevOps リポジトリに保存することです。 必要に応じてカスタム クエリの詳細をカスタマイズできますが、少なくともルール ID が必要です。 独自の CodeQL クエリを記述する方法の詳細については、「CodeQL クエリを記述する」を参照してください。 複数のクエリを 1 つのクエリ スイートにバンドルしたり、他のユーザーによって発行されたパックを利用したりすることもできます。 詳細については、「CodeQL パックを発行して使用する」を参照してください。
カスタム構成ファイルの使用
カスタム構成ファイルは、コードに対する CodeQL の分析中に実行されるクエリを管理する方法です。 実行する追加のクエリまたはクエリ パックを指定し、既定の CodeQL クエリを変更または無効にすることができます。
特定のクエリを含めるには、クエリの名前と、リポジトリ内のクエリ ファイル (.ql) の場所へのパスを指定します。
特定のパックを含めるには、パック名を指定します。 構成ファイルで実行する任意の数の CodeQL クエリ パックを指定できます。
次の手順に従って qlpack.yml
ファイルを作成します。 このファイルでは CodeQL パックとそれに関する情報を宣言します。 qlpack.yml
と同じディレクトリ (またはサブディレクトリ) 内の *.ql
ファイルはパッケージの一部と見なされます。
ヒント
構成ファイルの packs
フィルターは、GitHub でホストされているリポジトリからのパックのダウンロードをサポートしていますが、queries
フィルターはそうではありません。
パックが GitHub で非公開の場合は、AdvancedSecurity-Codeql-Init@1
タスクで GitHub のアクセス トークンを環境変数として提供し、変数名を 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
変数には、このパッケージのすべての依存関係、および互換性のあるバージョン範囲が含まれています。 各依存関係は CodeQL ライブラリ パックの scope/name
として参照されます。 dependencies
を定義する場合、qlpack.yml
はクエリで分析できる言語を決定するコア言語パック (JavaScript、C#、Ruby など) のいずれか 1 つだけに依存します。
構成ファイルに関するより具体的なアドバイスと構成オプションについては、「コード スキャンの詳細セットアップのカスタマイズ」を参照してください。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