Использование пользовательских запросов с CodeQL

По умолчанию, если у вас нет пользовательского файла конфигурации, указанного в настройке конвейера, CodeQL запускает security-extended пакет запросов для анализа кода. Вы можете использовать пользовательские запросы CodeQL для записи собственных запросов для поиска определенных уязвимостей и ошибок. Кроме того, необходимо создать пользовательский файл конфигурации для изменения анализа по умолчанию CodeQL.

Чтобы найти существующие пользовательские запросы или внести свой собственный пользовательский запрос, см. статью "Участие в CodeQL".

Анализ с помощью пользовательских запросов

Самый быстрый способ начать работу с пользовательским запросом — написать запрос и сохранить его в локальном репозитории Azure DevOps. Вы можете настроить сведения о пользовательском запросе в соответствии с вашими необходимыми данными, но он должен иметь по крайней мере идентификатор правила. Дополнительные сведения о написании собственного запроса CodeQL см. в статье "Написание запросов 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. При определении dependenciesqlpack.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