Skip to main content

CodeQL CLI SARIF 출력

CodeQL CLI에서 SARIF를 출력하고 정적 분석 결과를 다른 시스템과 공유할 수 있습니다.

누가 이 기능을 사용할 수 있나요?

CodeQL은(는) 다음 리포지토리 유형에 사용할 수 있습니다.

SARIF 출력 알아보기

SARIF는 광범위한 정적 분석 도구의 출력을 나타내도록 설계되었으며 SARIF 사양에는 "선택 사항"으로 간주되는 많은 기능이 있습니다. 이 문서에서는 SARIF v2.1.0.csd1 사양에 해당하는 형식 유형 sarifv2.1.0을 사용할 때 생성되는 출력에 대해 자세히 설명합니다. 분석 결과에 대한 파일 형식을 선택하는 방법에 대한 자세한 내용은 데이터베이스 분석하기을(를) 참조하세요.

SARIF 사양 및 스키마

이 문서는 자세한 SARIF 사양과 함께 읽기 위한 것입니다. 사양 및 SARIF 스키마에 대한 자세한 내용은 SARIF 사양 설명서를 참조하세요.

변경 내용 참고

버전 간 변경 내용

CodeQL 버전형식 유형Changes
2.0.0sarifv2.1.0이 형식의 첫 번째 버전입니다.

출력의 향후 변경 내용

지정된 특정 형식 유형(예: sarifv2.1.0)에 대해 생성된 출력은 향후 CodeQL 릴리스에서 변경될 수 있습니다. 생성된 SARIF의 소비자와 이전에 생성된 SARIF와의 호환성을 유지하도록 보장함으로써 노력할 것입니다.

  • 항상 생성되는 것으로 표시된 필드는 제거되지 않습니다.

  • 항상 생성되지 않는 것으로 표시된 필드의 경우 필드가 생성되는 상황이 변경될 수 있습니다. CodeQL SARIF 출력의 소비자는 이러한 필드의 존재 여부에 대해 견고해야 합니다.

새 출력 필드는 동일한 형식 유형으로 향후 릴리스에 추가될 수 있습니다. 이러한 필드는 이전 버전과의 호환성을 손상하는 것으로 간주되지 않으며 소비자는 새로 추가된 필드의 존재에 대해 강력해야 합니다.

새 형식 인수 형식은 새 버전의 SARIF를 지원하기 위해 CodeQL의 향후 버전에 추가될 수 있습니다. 명시적으로 문서화되지 않는 한 이전 버전과의 호환성을 보장하지 않습니다.

생성된 SARIF 개체

특정 상황과 함께 생성될 수 있는 각 SARIF 구성 요소에 대해 자세히 설명합니다. 생성되지 않는 속성은 생략합니다.

          `sarifLog` 개체
JSON 속성 이름항상 생성하시겠습니까?비고
$schema옥티콘 "check" aria-label="Always" %}
          [SARIF 스키마](https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json)에 대한 링크를 제공합니다.|

| version| 옥티콘 "check" aria-label="Always" %}| 출력을 생성하는 데 사용되는 SARIF의 버전입니다.| | runs| 옥티콘 "check" aria-label="Always" %}| 한 언어에 대한 단일 실행 개체를 포함하는 배열입니다.|

          `run` 개체
JSON 속성 이름항상 생성하시겠습니까?비고
tool옥티콘 "check" aria-label="Always" %}None
artifacts옥티콘 "check" aria-label="Always" %}결과에서 참조되는 모든 파일에 대해 하나 이상의 아티팩트 개체를 포함하는 배열입니다.
results옥티콘 "check" aria-label="Always" %}None
newLineSequences옥티콘 "check" aria-label="Always" %}None
columnKind옥티콘 "check" aria-label="Always" %}None
properties옥티콘 "check" aria-label="Always" %}속성 사전에는 CodeQL CLI에 전달된 형식 지정자를 식별하는 semmle.formatSpecifier가 포함됩니다.

          `tool` 개체
JSON 속성 이름항상 생성하시겠습니까?비고
driver옥티콘 "check" aria-label="Always" %}None

          `toolComponent` 개체
JSON 속성 이름항상 생성하시겠습니까?비고
name옥티콘 "check" aria-label="Always" %}CodeQL CLI 도구의 출력에 대해 "CodeQL 명령줄 도구 체인"으로 설정합니다. 다른 도구를 사용하여 출력이 생성된 경우 다른 name이 보고되며 형식은 여기에 설명된 것과 다를 수 있습니다.
organization옥티콘 "check" aria-label="Always" %}"GitHub"로 설정.
version옥티콘 "check" aria-label="Always" %}CodeQL 릴리스 버전(예: "2.0.0")으로 설정합니다.
rules옥티콘 "check" aria-label="Always" %}규칙을 나타내는 reportingDescriptor 개체의 배열입니다. 이 배열은 최소한 이 분석 중에 실행된 모든 규칙을 포함하지만, 사용할 수 있지만 실행되지 않은 규칙을 포함할 수 있습니다. 쿼리를 사용하도록 설정하는 방법에 대한 자세한 내용은 defaultConfiguration을 참조하세요.

          `reportingDescriptor` 개체(규칙용)

          `reportingDescriptor` 개체는 SARIF 사양의 여러 위치에서 사용할 수 있습니다. 
          `reportingDescriptor`가 `toolComponent` 개체의 규칙 배열에 포함되면 다음과 같은 속성을 갖습니다.
JSON 속성 이름항상 생성하시겠습니까?비고
id옥티콘 "check" aria-label="Always" %}일반적으로 @id 형식(예: language/rule-name)인 규칙을 정의하는 쿼리에 지정된 cpp/unsafe-format-string 속성을 포함합니다. 조직에서 쿼리에 @opaqueid 속성을 정의하는 경우 대신 사용됩니다.
name옥티콘 "check" aria-label="Always" %}쿼리에 지정된 @id 속성을 포함합니다. 예는 id 속성을 참조하세요.
shortDescription옥티콘 "check" aria-label="Always" %}규칙을 정의하는 쿼리에 지정된 @name 속성을 포함합니다.
fullDescription옥티콘 "check" aria-label="Always" %}규칙을 정의하는 쿼리에 지정된 @description 속성을 포함합니다.
defaultConfiguration옥티콘 "check" aria-label="Always" %}
          `reportingConfiguration` 개체로서, 사용 가능한 속성이 true 또는 false로 설정되고, 규칙을 정의하는 쿼리에 지정된 `@severity` 속성에 따라 수준 속성이 설정됩니다. 
          `@severity` 속성이 지정되지 않은 경우 생략됩니다.|

          `artifact` 개체
JSON 속성 이름항상 생성하시겠습니까?비고
location옥티콘 "check" aria-label="Always" %}
          `artifactLocation` 개체입니다.|

| index| 옥티콘 "check" aria-label="Always" %}| artifact 개체의 인덱스입니다.| | contents| | --sarif-add-file-contents 플래그를 사용하여 결과가 생성되고 SARIF 파일이 생성될 때 소스 코드를 사용할 수 있는 경우 contents 속성은 artifactContent 속성이 설정된 text 개체로 채워집니다.|

          `artifactLocation` 개체
JSON 속성 이름항상 생성하시겠습니까?비고
uri옥티콘 "check" aria-label="Always" %}None
index옥티콘 "check" aria-label="Always" %}None
uriBaseId파일이 분석 컴퓨터의 루트 원본 위치와 같은 알려진 추상 위치를 기준으로 하는 경우 이 속성이 설정됩니다.

          `result` 개체

결과의 컴퍼지션은 CodeQL에 제공된 옵션에 따라 달라집니다. 기본적으로 결과는 고유한 메시지 형식 문자열 및 기본 위치별로 그룹화됩니다. 따라서 동일한 기본 메시지를 사용하여 동일한 위치에서 발생하는 두 개의 결과는 출력에 하나의 결과로 표시됩니다. 이 동작은 --ungroup-results 플래그를 사용하여 사용하지 않을 수 있으며, 이 경우 결과가 그룹화되지 않습니다.

JSON 속성 이름항상 생성하시겠습니까?비고
ruleId옥티콘 "check" aria-label="Always" %}
          `id` 개체(규칙용)의 `reportingDescriptor` 속성에 대한 설명을 참조하세요.|

| ruleIndex| 옥티콘 "check" aria-label="Always" %}| None | | message| 옥티콘 "check" aria-label="Always" %}| 이 위치에서 발생하는 문제를 설명하는 메시지입니다. 이 메시지는 relatedLocations 속성의 위치를 참조하는 링크를 포함하는 SARIF "자리 표시자가 있는 메시지"일 수 있습니다.| | locations| 옥티콘 "check" aria-label="Always" %}| 하나의 location 개체를 포함하는 배열입니다.| | partialFingerprints| 옥티콘 "check" aria-label="Always" %}| 이름이 지정된 지문 유형과 지문을 연결하는 사전입니다. 여기에는 최소한 기본 위치의 컨텍스트에 따라 지문을 제공하는 primaryLocationLineHash 값이 포함됩니다.| | codeFlows| | 이 결과에 대한 규칙을 정의하는 쿼리가 codeFlow인 경우 이 배열은 하나 이상의 @kind path-problem 개체로 채워질 수 있습니다.| | relatedLocations| | 이 결과에 대한 규칙을 정의하는 쿼리에 자리 표시자 옵션이 있는 메시지가 있는 경우 이 배열이 채워집니다. 각 고유한 위치는 한 번 포함됩니다.| | suppressions| | 결과가 억제된 경우, @kind 속성이 IN_SOURCE로 설정된 단일 suppression 개체를 포함합니다. 이 결과가 억제되지 않지만, 억제가 있는 결과가 하나 이상 있는 경우에는 빈 배열로 설정되고, 그렇지 않으면 설정되지 않습니다.|

          `location` 개체
JSON 속성 이름항상 생성하시겠습니까?비고
physicalLocation옥티콘 "check" aria-label="Always" %}None
id
          `location` 개체의 `relatedLocations` 배열에 나타나는 `result` 개체는 `id` 속성을 포함될 수 있습니다.|

| message| | location 개체는 다음과 같은 경우 message 속성을 포함할 수 있습니다.

- relatedLocations 속성을 포함할 수 있는 result 개체의 message 배열에 나타나는 경우

- threadFlowLocation.location 속성에 나타납니다.|

          `physicalLocation` 개체
JSON 속성 이름항상 생성하시겠습니까?비고
artifactLocation옥티콘 "check" aria-label="Always" %}None
region주어진 physicalLocation이 텍스트 파일(예: 소스 코드 파일)에 있는 경우 region 속성이 있을 수 있습니다.
contextRegion이 위치에 연결된 snippet이 있는 경우 존재할 수 있습니다.

          `region` 개체

CodeQL에서 생성된 region 개체에는 두 가지 유형이 있습니다.

  • 줄/열 오프셋 영역

  • 문자 오프셋 및 길이 영역

CodeQL에서 생성된 모든 지역은 어느 형식으로든 지정할 수 있으며 소비자는 두 형식을 강력하게 처리해야 합니다.

줄/열 오프셋 영역의 경우 다음 속성이 설정됩니다.

JSON 속성 이름항상 생성하시겠습니까?비고
startLine옥티콘 "check" aria-label="Always" %}None
startColumn기본값 1과 같으면 포함되지 않습니다.
endLine
          `startLine`과 동일하면 포함되지 않습니다.|

| endColumn| 옥티콘 "check" aria-label="Always" %}| None | | snippet| | None |

문자 오프셋 및 길이 영역의 경우 다음 속성이 설정됩니다.

JSON 속성 이름항상 생성하시겠습니까?비고
charOffset
          `startLine`, `startColumn`, `endLine`, 및 `endColumn`이 채워지지 않은 경우 제공됩니다.|

| charLength| | startLine, startColumn, endLine, 및 endColumn이 채워지지 않은 경우 제공됩니다.| | snippet| | None |

          `codeFlow` 개체
JSON 속성 이름항상 생성하시겠습니까?비고
threadFlows옥티콘 "check" aria-label="Always" %}None

          `threadFlow` 개체
JSON 속성 이름항상 생성하시겠습니까?비고
locations옥티콘 "check" aria-label="Always" %}None

          `threadFlowLocation` 개체
JSON 속성 이름항상 생성하시겠습니까?비고
location옥티콘 "check" aria-label="Always" %}None