1
0
mirror of synced 2026-01-02 12:04:38 -05:00
Files
docs/translations/ru-RU/content/code-security/code-scanning/integrating-with-code-scanning/sarif-support-for-code-scanning.md
2022-11-16 21:42:42 +00:00

53 KiB
Raw Blame History

title, shortTitle, intro, product, miniTocMaxHeadingLevel, redirect_from, versions, type, topics, ms.openlocfilehash, ms.sourcegitcommit, ms.translationtype, ms.contentlocale, ms.lasthandoff, ms.locfileid
title shortTitle intro product miniTocMaxHeadingLevel redirect_from versions type topics ms.openlocfilehash ms.sourcegitcommit ms.translationtype ms.contentlocale ms.lasthandoff ms.locfileid
Поддержка SARIF для проверки кода SARIF support Чтобы отобразить результаты стороннего средства статического анализа в вашем репозитории в {% data variables.product.prodname_dotcom %}, необходимо хранить результаты в файле SARIF, поддерживающем конкретное подмножество схемы JSON SARIF 2.1.0 для {% data variables.product.prodname_code_scanning %}. Если вы используете подсистему статического анализа {% data variables.product.prodname_codeql %}, результаты будут автоматически отображаться в репозитории на сайте {% data variables.product.prodname_dotcom %}. {% data reusables.gated-features.code-scanning %} 3
/github/finding-security-vulnerabilities-and-errors-in-your-code/about-sarif-support-for-code-scanning
/github/finding-security-vulnerabilities-and-errors-in-your-code/sarif-support-for-code-scanning
/code-security/secure-coding/sarif-support-for-code-scanning
/code-security/secure-coding/integrating-with-code-scanning/sarif-support-for-code-scanning
fpt ghes ghae ghec
* * * *
reference
Advanced Security
Code scanning
Integration
SARIF
98d0e4620d240c3e1863aaee6f57a5834c86018b aa488e9e64 MT ru-RU 11/11/2022 148162794

{% data reusables.code-scanning.beta %}

Сведения о поддержке SARIF

SARIF (Static Analysis Results Interchange Format) — это стандарт OASIS, определяющий формат выходного файла. Стандарт SARIF упрощает совместное использование результатов средств статического анализа. {% data variables.product.prodname_code_scanning_capc %} поддерживает подмножество схемы JSON для SARIF 2.1.0.

Чтобы передать файл SARIF из сторонней подсистемы статического анализа кода, необходимо убедиться, что отправленные файлы используют SARIF версии 2.1.0. {% data variables.product.prodname_dotcom %} анализирует файл SARIF и отображает оповещения, используя результаты из репозитория в рамках работы с {% data variables.product.prodname_code_scanning %}. Дополнительные сведения см. в статье Передача файла SARIF в {% data variables.product.prodname_dotcom %}. Дополнительные сведения о схеме JSON для SARIF 2.1.0 см. в документации по sarif-schema-2.1.0.json.

Если вы используете {% data variables.product.prodname_actions %} с {% data variables.code-scanning.codeql_workflow %}{% ifversion codeql-runner-supported %}, используя {% data variables.code-scanning.codeql_runner %},{% endif %} или {% data variables.product.prodname_codeql_cli %}, результаты {% data variables.product.prodname_code_scanning %} будут автоматически использовать поддерживаемую часть SARIF 2.1.0. Дополнительные сведения см. в разделах Настройка {% data variables.product.prodname_code_scanning %} для репозитория{% ifversion codeql-runner-supported %}, Выполнение {% data variables.code-scanning.codeql_runner %} в системе CI,{% endif %} или Установка CodeQL CLI в системе CI.

Можно передать несколько файлов SARIF для одной и той же фиксации и отобразить данные из каждого файла в виде результатов {% data variables.product.prodname_code_scanning %}. При передаче нескольких файлов SARIF для фиксации необходимо указать категорию для каждого анализа. Способ указания категории зависит от метода анализа:

  • Используя {% data variables.product.prodname_codeql_cli %} напрямую, при создании файлов SARIF передайте аргумент --sarif-category для команды codeql database analyze. Дополнительные сведения см. в разделе Настройка CodeQL CLI в системе CI.
  • Используя {% data variables.product.prodname_actions %} с codeql-action/analyze, категория задается автоматически из имени рабочего процесса и любых переменных матрицы (обычно это language). Ее можно переопределить, указав входные данные category для действия, что полезно при анализе разных разделов монорепозитория в одном рабочем процессе.
  • Используя {% data variables.product.prodname_actions %} для передачи результатов из других средств статического анализа, вам необходимо указать входные данные category, если вы передаете несколько файлов результатов для одного и того же средства в одном рабочем процессе. Дополнительные сведения см. в разделе Передача анализа {% data variables.product.prodname_code_scanning %} с помощью {% data variables.product.prodname_actions %}.
  • Если вы не используете ни один из этих подходов, то вам необходимо указать уникальный runAutomationDetails.id в каждом файле SARIF для передачи. Дополнительные сведения об этом свойстве см. далее в разделе Объект runAutomationDetails.

При передаче второго файла SARIF для фиксации с той же категорией и из того же средства более ранние результаты перезаписываются. Однако при попытке передать несколько файлов SARIF для одного и того же средства и категории в одном запуске рабочего процесса {% data variables.product.prodname_actions %} будет определена неправильная настройка и выполнение завершится ошибкой.

Для вывода оповещений {% data variables.product.prodname_dotcom %} использует свойства в файле SARIF. Например, shortDescription и fullDescription отображаются в верхней части оповещения {% data variables.product.prodname_code_scanning %}. location позволяет {% data variables.product.prodname_dotcom %} отображать заметки в файле кода. Дополнительные сведения см. в статье Управление оповещениями {% data variables.product.prodname_code_scanning %} для репозитория.

Если вы не знакомы с SARIF и хотите узнать больше, ознакомьтесь репозиторием SARIF tutorials корпорации Майкрософт.

Предоставление данных для отслеживания оповещений {% data variables.product.prodname_code_scanning %} в разных запусках

При каждой отправке результатов новой проверки кода эти результаты обрабатываются, а в репозиторий добавляются предупреждения. Чтобы предотвратить дублирование оповещений для одной и той же проблемы, {% data variables.product.prodname_code_scanning %} использует отпечатки, позволяющие сопоставлять результаты различных запусков. Поэтому оповещения появляются только один раз в последнем запуске выбранной ветви. Это позволяет сопоставлять оповещения с правильной строкой кода при редактировании файлов. Для ruleID результата должен быть одинаковым в разных анализах.

Отчеты о согласованных пути к файлам

Путь к файлу должен быть согласованным во всех запусках, чтобы обеспечить вычисление стабильного отпечатка пальца. Если пути к файлам отличаются для одного и того же результата, при каждом анализе создается новое оповещение, а старое будет закрыто. Это приведет к созданию нескольких оповещений для одного и того же результата.

Включение данных для создания отпечатков пальцев

{% data variables.product.prodname_dotcom %} использует свойство partialFingerprints в стандарте OASIS, чтобы определить логическую идентичность двух результатов. Дополнительные сведения см. в записи свойства partialFingerprints в документации по OASIS.

Файлы SARIF, созданные {% data variables.code-scanning.codeql_workflow %}, {% ifversion codeql-runner-supported %}с помощью {% data variables.code-scanning.codeql_runner %}, {% endif %} или с помощью {% data variables.product.prodname_codeql_cli %}, включают данные отпечатков пальцев. Если вы отправили файл SARIF с помощью действия upload-sarif, но эти данные отсутствуют, {% data variables.product.prodname_dotcom %} пытается заполнить поле partialFingerprints из исходных файлов. Дополнительные сведения об отправке результатов см. в статье Передача файла SARIF в {% data variables.product.prodname_dotcom %}.

Если вы отправляете файл SARIF без данных отпечатков с помощью конечной точки API /code-scanning/sarifs, оповещения {% data variables.product.prodname_code_scanning %} будут обрабатываться и отображаться, но пользователи могут видеть повторяющиеся оповещения. Чтобы избежать появления повторяющихся оповещений, следует вычислить данные отпечатка и заполнить свойство partialFingerprints перед отправкой файла SARIF. Вы можете найти скрипт, в котором действие upload-sarif использует полезную отправную точку: https://github.com/github/codeql-action/blob/main/src/fingerprints.ts. Дополнительные сведения об API см. в разделе Передача анализа в виде данных SARIF.

Общие сведения о правилах и результатах

Файлы SARIF поддерживают как правила, так и результаты. Информация, хранящаяся в этих элементах, аналогична, но предназначена для разных целей.

  • Правила — это массив объектов reportingDescriptor, включенных в объект toolComponent. Здесь хранятся сведения о правилах, выполняемых во время анализа. Информация в этих объектах должна изменяться редко, обычно при обновлении средства.

  • Результаты хранятся в виде ряда объектов result в results в объекте run. Каждый объект result содержит сведения об одном оповещении в базе кода. В объекте results можно ссылаться на правило, которое обнаружило оповещение.

Сравнивая файлы SARIF, созданные путем анализа разных баз кода, с одним и тем же средством и правилами, вы должны увидеть различия в результатах анализа, но не в правилах.

Указание корневого каталога для исходных файлов

{% data variables.product.prodname_code_scanning_capc %} интерпретирует результаты, сообщаемые с относительными путями, как относительно корня проанализированного репозитория. Если результат содержит абсолютный URI, URI преобразуется в относительный URI. Затем относительный URI можно сопоставить с файлом, зафиксированным в репозитории.

Корневой каталог источника можно указать для преобразования из абсолютных в относительные URI одним из следующих способов.

При указании корня источника любое расположение артефакта, указанное с помощью абсолютного URI, должно использовать ту же схему URI. При наличии несоответствия между схемой URI для корня источника и одним или несколькими абсолютными URI отправка отклоняется.

Например, SARIF-файл отправляется с помощью корневого file:///github/workspaceкаталога источника .

# Conversion of absolute URIs to relative URIs for location artifacts

file:///github/workspace/src/main.go -> src/main.go
file:///tmp/go-build/tmp.go          -> file:///tmp/go-build/tmp.go

Файл успешно отправлен, так как оба абсолютных URI используют ту же схему URI, что и корень источника.

Проверка файла SARIF

Вы можете проверить совместимость файла SARIF с {% data variables.product.prodname_code_scanning %}, протестировав его в соответствии с правилами приема данных {% data variables.product.prodname_dotcom %}. Дополнительные сведения см. на странице проверяющего элемента управления SARIF Microsoft.

{% data reusables.code-scanning.upload-sarif-alert-limit %}

Поддерживаемые свойства выходного файла SARIF

При использовании подсистемы анализа кода, отличной от {% data variables.product.prodname_codeql %}, можно проверить поддерживаемые свойства SARIF, чтобы оптимизировать способ отображения результатов анализа в {% data variables.product.prodname_dotcom %}.

{% note %}

Примечание: Необходимо указать явное значение для любого свойства, помеченного как "required". Пустая строка не поддерживается для обязательных свойств.

{% endnote %}

Любой допустимый выходной файл SARIF 2.1.0 можно отправить, но {% data variables.product.prodname_code_scanning %} будет использовать только указанные ниже поддерживаемые свойства.

Объект sarifLog.

Имя Описание
$schema Обязательный. Универсальный код ресурса (URI) схемы JSON для SARIF версии 2.1.0. Например, https://json.schemastore.org/sarif-2.1.0.json.
version Обязательный. {% data variables.product.prodname_code_scanning_capc %} поддерживает только SARIF версии 2.1.0.
runs[] Обязательный. Файл SARIF содержит массив из одного или нескольких запусков. Каждый запуск представляет собой один запуск средства анализа. Дополнительные сведения о run см. в разделе Объект run.

Объект run.

{% data variables.product.prodname_code_scanning_capc %} использует объект run для фильтрации результатов по средству и предоставлению сведений об источнике результата. Объект run содержит объект компонента средства tool.driver, содержащий сведения о средстве, которое создало результаты. Каждый объект run может содержать только результаты для одного средства анализа.

Имя Описание
tool.driver Обязательный. Объект toolComponent, описывающий средство анализа. Дополнительные сведения см. в разделе Объект toolComponent.
tool.extensions[] Необязательный элемент. Массив объектов toolComponent, представляющих все подключаемые модули или расширения, используемые средством во время анализа. Дополнительные сведения см. в разделе Объект toolComponent.
invocation.workingDirectory.uri Необязательный элемент. Это поле используется только в том случае, если checkout_uri (только API отправки SARIF) или checkout_path (только {% data variables.product.prodname_actions %} не предоставляется. Значение используется для преобразования абсолютных URI, используемых в объектах, в physicalLocation относительные URI. Дополнительные сведения см. в разделе Указание корневого каталога для исходных файлов.
results[] Обязательный. Результаты средства анализа. {% data variables.product.prodname_code_scanning_capc %} отображает результаты в {% data variables.product.prodname_dotcom %}. Дополнительные сведения см. в разделе Объект result.

Объект toolComponent.

Имя Описание
name Обязательный. Имя средства анализа. {% data variables.product.prodname_code_scanning_capc %} отображает имя в {% data variables.product.prodname_dotcom %}, чтобы можно было фильтровать результаты по средству.
version Необязательный элемент. Версия средства анализа. {% data variables.product.prodname_code_scanning_capc %} использует номер версии для отслеживания изменения результатов вследствие изменения версии средства, а не изменения анализируемого кода. Если файл SARIF содержит поле semanticVersion, {% data variables.product.prodname_code_scanning %} не использует version.
semanticVersion Необязательный элемент. Версия средства анализа, заданная форматом Семантического версионирования 2.0. {% data variables.product.prodname_code_scanning_capc %} использует номер версии для отслеживания изменения результатов вследствие изменения версии средства, а не изменения анализируемого кода. Если файл SARIF содержит поле semanticVersion, {% data variables.product.prodname_code_scanning %} не использует version. Дополнительные сведения см. на сайте по Семантическому версионированию 2.0.0 в документации.
rules[] Обязательный. Массив объектов reportingDescriptor, представляющих правила. Средство анализа использует правила для поиска проблем в анализируемом коде. Дополнительные сведения см. в разделе Объект reportingDescriptor.

Объект reportingDescriptor.

Здесь хранятся сведения о правилах, выполняемых во время анализа. Информация в этих объектах должна изменяться редко, обычно при обновлении средства. Дополнительные сведения см. в разделе Общие сведения о правилах и результатах выше.

Имя Описание
id Обязательный. Уникальный идентификатор правила. id ссылается на другие части файла SARIF, а {% data variables.product.prodname_code_scanning %} может его использовать для отображения URL-адресов в {% data variables.product.prodname_dotcom %}.
name Необязательный элемент. Имя правила. {% data variables.product.prodname_code_scanning_capc %} отображает имя, чтобы можно было фильтровать результаты по правилу в {% data variables.product.prodname_dotcom %}.
shortDescription.text Обязательный. Краткое описание правила. {% data variables.product.prodname_code_scanning_capc %} отображает краткое описание в {% data variables.product.prodname_dotcom %} рядом с соответствующими результатами.
fullDescription.text Обязательный. Описание правила. {% data variables.product.prodname_code_scanning_capc %} отображает полное описание в {% data variables.product.prodname_dotcom %} рядом с соответствующими результатами. Максимальное количество знаков — 1000.
defaultConfiguration.level Необязательный элемент. Уровень серьезности правила по умолчанию. {% data variables.product.prodname_code_scanning_capc %} использует уровни серьезности, чтобы помочь вам понять, насколько важен результат для данного правила. Это значение можно переопределить атрибутом level в объекте result. Дополнительные сведения см. в разделе Объект result. Значение по умолчанию: warning.
help.text Обязательный. Документация по правилу с использованием текстового формата. {% data variables.product.prodname_code_scanning_capc %} отображает эту справочную документацию рядом с соответствующими результатами.
help.markdown Рекомендуется. Документация по правилу с использованием формата Markdown. {% data variables.product.prodname_code_scanning_capc %} отображает эту справочную документацию рядом с соответствующими результатами. Если объект help.markdown доступен, то отображается вместо help.text.
properties.tags[] Необязательный элемент. Массив строк. {% data variables.product.prodname_code_scanning_capc %} использует tags, чтобы можно было фильтровать результаты в {% data variables.product.prodname_dotcom %}. Например, можно отфильтровать все результаты с тегом security.
properties.precision Рекомендуется. Строка, показывающая, как часто результаты, указанные этим правилом, являются истинными. Например, если правило имеет известный высокий ложноположительный коэффициент, то точность должна быть low. {% data variables.product.prodname_code_scanning_capc %} упорядочивает результаты по точности в {% data variables.product.prodname_dotcom %}, чтобы сначала отображались результаты с наивысшим level и наибольшей precision. Это может быть very-high, high, medium или low.
properties.problem.severity Рекомендуется. Строка, указывающая уровень серьезности любых оповещений, созданных запросом, не связанным с безопасностью. Со свойством properties.precision определяет, отображаются ли результаты по умолчанию в {% data variables.product.prodname_dotcom %} так, чтобы сначала отображались результаты с наивысшим значением problem.severity и наибольшей precision. Это может быть error, warning или recommendation.
properties.security-severity Рекомендуется. Строка, представляющая оценку, указывающую уровень серьезности (в диапазоне от 0,0 до 10,0) для запросов безопасности (@tags содержит security). Со свойством properties.precision определяет, отображаются ли результаты по умолчанию в {% data variables.product.prodname_dotcom %} так, чтобы сначала отображались результаты с наивысшим значением security-severity и наибольшей precision. {% data variables.product.prodname_code_scanning_capc %} преобразует числовые оценки следующим образом: больше 9,0 — critical, от 7,0 до 8,9 — high, от 4,0 до 6,9 — medium и 3,9 или меньше — low.

Объект result.

Каждый объект result содержит сведения об одном оповещении в базе кода. В объекте results можно ссылаться на правило, которое обнаружило оповещение. Дополнительные сведения см. в разделе Общие сведения о правилах и результатах выше.

{% data reusables.code-scanning.upload-sarif-alert-limit %}

Имя Описание
ruleId Необязательный элемент. Уникальный идентификатор правила (reportingDescriptor.id). Дополнительные сведения см. в разделе Объект reportingDescriptor. {% data variables.product.prodname_code_scanning_capc %} использует идентификатор правила, чтобы фильтровать результаты по правилу в {% data variables.product.prodname_dotcom %}.
ruleIndex Необязательный элемент. Индекс связанного правила (объект reportingDescriptor) в массиве rules компонента средства. Дополнительные сведения см. в разделе Объект run. Допустимый диапазон для этого свойства от 0 до 2^63  1.
rule Необязательный элемент. Ссылка, используемая для поиска правила (дескриптора отчетности) для этого результата. Дополнительные сведения см. в разделе Объект reportingDescriptor.
level Необязательный элемент. Серьезность результата. Этот уровень переопределяет серьезность по умолчанию, определенную правилом. {% data variables.product.prodname_code_scanning_capc %} использует уровень, чтобы фильтровать результаты по серьезности в {% data variables.product.prodname_dotcom %}.
message.text Обязательный. Сообщение, которое описывает результат. {% data variables.product.prodname_code_scanning_capc %} отображает текст сообщения в качестве заголовка результата. Если видимое пространство ограничено, отображается только первое предложение сообщения.
locations[] Обязательный. Набор расположений, в которых был обнаружен результат ( не более 10). Следует включить только одно расположение, если проблему не получается исправить только внесением изменений в каждом указанном расположении. Примечание. Для отображения результата требуется по крайней мере одно расположение для {% data variables.product.prodname_code_scanning %}. {% data variables.product.prodname_code_scanning_capc %} будет использовать это свойство, чтобы определить, какой файл добавлять в заметки к результату. Используется только первое значение этого массива. Все остальные значения не учитываются.
partialFingerprints Обязательный. Набор строк, используемых для отслеживания уникального идентификатора результата. {% data variables.product.prodname_code_scanning_capc %} использует partialFingerprints, чтобы точно определить, какие результаты одинаковые в фиксациях и ветвях. {% data variables.product.prodname_code_scanning_capc %} попытается использовать partialFingerprints, если они существуют. Если вы отправляете сторонние файлы SARIF с помощью upload-action, то для вас действие создаст partialFingerprints (если их нет в файле SARIF). Дополнительные сведения см. в разделе Предоставление данных для отслеживания оповещений сканирования кода во время выполнения. Примечание. {% data variables.product.prodname_code_scanning_capc %} использует только primaryLocationLineHash.
codeFlows[].threadFlows[].locations[] Необязательный элемент. Массив объектов location для объекта threadFlow, который описывает ход выполнения программы через поток выполнения. Объект codeFlow описывает шаблон выполнения кода для обнаружения результата. Если потоки кода предоставлены, {% data variables.product.prodname_code_scanning %} развернет потоки кода в {% data variables.product.prodname_dotcom %} для соответствующего результата. Дополнительные сведения см. в разделе Объект location.
relatedLocations[] Набор расположений, относящихся к этому результату. {% data variables.product.prodname_code_scanning_capc %} будет ссылаться на связанные расположения при их внедрении в результирующее сообщение. Дополнительные сведения см. в разделе Объект location.

Объект location.

Расположение в артефакте программирования, например файл в репозитории или файл, созданный во время сборки.

Имя Описание
location.id Необязательный элемент. Уникальный идентификатор, отличающий это расположение от всех остальных расположений в одном объекте результата. Допустимый диапазон для этого свойства от 0 до 2^63  1.
location.physicalLocation Обязательный. Идентифицирует артефакт и регион. Более подробную информацию см. в разделе physicalLocation.
location.message.text Необязательный элемент. Сообщение, соответствующее расположению.

Объект physicalLocation.

Имя Описание
artifactLocation.uri Обязательный. Универсальный код ресурса (URI), указывающий расположение артефакта, обычно это файл в репозитории или созданный во время сборки. Для достижения наилучших результатов рекомендуется использовать относительный путь из корня анализируемого репозитория GitHub. Например, src/main.js. Дополнительные сведения об URI артефактов см. в разделе Указание корневого каталога для исходных файлов.
region.startLine Обязательный. Номер строки первого символа в регионе.
region.startColumn Обязательный. Номер столбца первого символа в регионе.
region.endLine Обязательный. Номер строки последнего символа в регионе.
region.endColumn Обязательный. Номер столбца символа, следующего за концом региона.

Объект runAutomationDetails.

Объект runAutomationDetails содержит сведения, указывающие идентификатор выполнения.

{% note %}

Примечание. runAutomationDetails является объектом SARIF версии 2.1.0. Если вы используете {% data variables.product.prodname_codeql_cli %}, можно указать используемую версию SARIF. Эквивалентным объектом для runAutomationDetails является <run>.automationId для SARIF версии 1 и <run>.automationLogicalId для SARIF версии 2.

{% endnote %}

Имя Описание
id Необязательный элемент. Строка, идентифицирующая категорию анализа и идентификатор выполнения. Используйте, если вы хотите передать несколько файлов SARIF для одного и того же средства и фиксации, но для разных языков или различных частей кода.

Использование объекта runAutomationDetails не является обязательным.

Поле id может включать категорию анализа и идентификатор выполнения. Мы не используем элемент идентификатора выполнения в поле id, но сохраняем его.

Используйте эту категорию для различения нескольких анализов для одного и того же средства или фиксации, но для разных языков или различных элементов кода. Используйте идентификатор выполнения, чтобы определить конкретный запуск анализа, например дату запуска анализа.

id интерпретируется как category/run-id. Если id содержит косую черту (/), то вся строка является run_id, а category будет пустой. В противном случае category является все, что находится в строке до последней косой черты, а все, что после нее — run_id.

id категория run_id
my-analysis/tool1/2021-02-01 my-analysis/tool1 2021-02-01
my-analysis/tool1/ my-analysis/tool1 нет run-id
my-analysis for tool1 нет категории my-analysis for tool1
  • Выполнение с id для my-analysis/tool1/2021-02-01 относится к категории my-analysis/tool1. Предположительно, это запуск от 2 февраля 2021 г.
  • Выполнение с id для my-analysis/tool1/ относится к категории my-analysis/tool1, но не отличается от других выполнений в этой категории.
  • Выполнение, id которого является my-analysis for tool1, имеет уникальный идентификатор, но не может быть выводимым для принадлежности к какой-либо категории.

Дополнительные сведения об объекте runAutomationDetails и поле id см. в разделе Объект runAutomationDetails в документации по OASIS.

Обратите внимание, что остальные поддерживаемые поля не учитываются.

Примеры выходных файлов SARIF

В этих примерах выходных файлов SARIF отображаются поддерживаемые свойства и примеры значений.

Пример с минимальными обязательными свойствами

Этот выходной файл SARIF содержит примеры значений для отображения минимальных обязательных свойств для результатов {% data variables.product.prodname_code_scanning %} для нормальной работы. Если удалить какие-либо свойства, опустить значения или использовать пустую строку, эти данные не будут отображаться правильно или синхронизироваться с {% data variables.product.prodname_dotcom %}.

{
  "$schema": "https://json.schemastore.org/sarif-2.1.0.json",
  "version": "2.1.0",
  "runs": [
    {
      "tool": {
        "driver": {
          "name": "Tool Name",
          "rules": [
            {
              "id": "R01"
                      ...
              "properties" : {
                 "id" : "java/unsafe-deserialization",
                 "kind" : "path-problem",
                 "name" : "...",
                 "problem.severity" : "error",
                 "security-severity" : "9.8",
               }
            }
          ]
        }
      },
      "results": [
        {
          "ruleId": "R01",
          "message": {
            "text": "Result text. This result does not have a rule associated."
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "fileURI"
                },
                "region": {
                  "startLine": 2,
                  "startColumn": 7,
                  "endColumn": 10
                }
              }
            }
          ],
          "partialFingerprints": {
            "primaryLocationLineHash": "39fa2ee980eb94b0:1"
          }
        }
      ]
    }
  ]
}

Пример, показывающий все поддерживаемые свойства SARIF

Этот выходной файл SARIF содержит примеры значений для отображения всех поддерживаемых свойств SARIF для {% data variables.product.prodname_code_scanning %}.

{
  "$schema": "https://json.schemastore.org/sarif-2.1.0.json",
  "version": "2.1.0",
  "runs": [
    {
      "tool": {
        "driver": {
          "name": "Tool Name",
          "semanticVersion": "2.0.0",
          "rules": [
            {
              "id": "3f292041e51d22005ce48f39df3585d44ce1b0ad",
              "name": "js/unused-local-variable",
              "shortDescription": {
                "text": "Unused variable, import, function or class"
              },
              "fullDescription": {
                "text": "Unused variables, imports, functions or classes may be a symptom of a bug and should be examined carefully."
              },
              "defaultConfiguration": {
                "level": "note"
              },
              "properties": {
                "tags": [
                  "maintainability"
                ],
                "precision": "very-high"
              }
            },
            {
              "id": "d5b664aefd5ca4b21b52fdc1d744d7d6ab6886d0",
              "name": "js/inconsistent-use-of-new",
              "shortDescription": {
                "text": "Inconsistent use of 'new'"
              },
              "fullDescription": {
                "text": "If a function is intended to be a constructor, it should always be invoked with 'new'. Otherwise, it should always be invoked as a normal function, that is, without 'new'."
              },
              "properties": {
                "tags": [
                  "reliability",
                  "correctness",
                  "language-features"
                ],
                "precision": "very-high"
              }
            },
            {
              "id": "R01"
            }
          ]
        }
      },
      "automationDetails": {
        "id": "my-category/"
      },
      "results": [
        {
          "ruleId": "3f292041e51d22005ce48f39df3585d44ce1b0ad",
          "ruleIndex": 0,
          "message": {
            "text": "Unused variable foo."
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "main.js",
                  "uriBaseId": "%SRCROOT%"
                },
                "region": {
                  "startLine": 2,
                  "startColumn": 7,
                  "endColumn": 10
                }
              }
            }
          ],
          "partialFingerprints": {
            "primaryLocationLineHash": "39fa2ee980eb94b0:1",
            "primaryLocationStartColumnFingerprint": "4"
          }
        },
        {
          "ruleId": "d5b664aefd5ca4b21b52fdc1d744d7d6ab6886d0",
          "ruleIndex": 1,
          "message": {
            "text": "Function resolvingPromise is sometimes invoked as a constructor (for example [here](1)), and sometimes as a normal function (for example [here](2))."
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "src/promises.js",
                  "uriBaseId": "%SRCROOT%"
                },
                "region": {
                  "startLine": 2
                }
              }
            }
          ],
          "partialFingerprints": {
            "primaryLocationLineHash": "5061c3315a741b7d:1",
            "primaryLocationStartColumnFingerprint": "7"
          },
          "relatedLocations": [
            {
              "id": 1,
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "src/ParseObject.js",
                  "uriBaseId": "%SRCROOT%"
                },
                "region": {
                  "startLine": 2281,
                  "startColumn": 33,
                  "endColumn": 55
                }
              },
              "message": {
                "text": "here"
              }
            },
            {
              "id": 2,
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "src/LiveQueryClient.js",
                  "uriBaseId": "%SRCROOT%"
                },
                "region": {
                  "startLine": 166
                }
              },
              "message": {
                "text": "here"
              }
            }
          ]
        },
        {
          "ruleId": "R01",
          "message": {
            "text": "Specifying both [ruleIndex](1) and [ruleID](2) might lead to inconsistencies."
          },
          "level": "error",
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "full.sarif",
                  "uriBaseId": "%SRCROOT%"
                },
                "region": {
                  "startLine": 54,
                  "startColumn": 10,
                  "endLine": 55,
                  "endColumn": 25
                }
              }
            }
          ],
          "relatedLocations": [
            {
              "id": 1,
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "full.sarif"
                },
                "region": {
                  "startLine": 81,
                  "startColumn": 10,
                  "endColumn": 18
                }
              },
              "message": {
                "text": "here"
              }
            },
            {
              "id": 2,
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "full.sarif"
                },
                "region": {
                  "startLine": 82,
                  "startColumn": 10,
                  "endColumn": 21
                }
              },
              "message": {
                "text": "here"
              }
            }
          ],
          "codeFlows": [
            {
              "threadFlows": [
                {
                  "locations": [
                    {
                      "location": {
                        "physicalLocation": {
                          "region": {
                            "startLine": 11,
                            "endLine": 29,
                            "startColumn": 10,
                            "endColumn": 18
                          },
                          "artifactLocation": {
                            "uriBaseId": "%SRCROOT%",
                            "uri": "full.sarif"
                          }
                        },
                        "message": {
                          "text": "Rule has index 0"
                        }
                      }
                    },
                    {
                      "location": {
                        "physicalLocation": {
                          "region": {
                            "endColumn": 47,
                            "startColumn": 12,
                            "startLine": 12
                          },
                          "artifactLocation": {
                            "uriBaseId": "%SRCROOT%",
                            "uri": "full.sarif"
                          }
                        }
                      }
                    }
                  ]
                }
              ]
            }
          ],
          "partialFingerprints": {
            "primaryLocationLineHash": "ABC:2"
          }
        }
      ],
      "columnKind": "utf16CodeUnits"
    }
  ]
}