Skip to main content

이 버전의 GitHub Enterprise는 다음 날짜에 중단되었습니다. 2026-03-17. 중요한 보안 문제에 대해서도 패치 릴리스가 이루어지지 않습니다. 더 뛰어난 성능, 향상된 보안, 새로운 기능을 위해 최신 버전의 GitHub Enterprise Server로 업그레이드합니다. 업그레이드에 대한 도움말은 GitHub Enterprise 지원에 문의하세요.

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