Skip to main content

CodeQL CLI SARIF 출력

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

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

GitHub CodeQL은(는) 설치 시 사용자별로 라이선스가 부여됩니다. 라이선스 제한에 따라 특정 작업에만 CodeQL을(를) 사용할 수 있습니다. 자세한 내용은 "CodeQL CLI 알아보기"을 참조하세요.

GitHub Advanced Security 라이선스가 있는 경우 CodeQL을(를) 사용하여 분석 자동화, 연속 통합 및 지속적인 업데이트를 할 수 있습니다. 자세한 내용은 "GitHub Advanced Security 정보.

SARIF 출력 알아보기

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

SARIF 사양 및 스키마

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

변경 내용 참고

버전 간 변경 내용

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

출력의 향후 변경 내용

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

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

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

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

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

생성된 SARIF 개체

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

sarifLog 개체

JSON 속성 이름항상 생성하시겠습니까?주의
$schemaSARIF 스키마에 대한 링크를 제공합니다.
version출력을 생성하는 데 사용되는 SARIF의 버전입니다.
runs한 언어에 대한 단일 실행 개체를 포함하는 배열입니다.

run 개체

JSON 속성 이름항상 생성하시겠습니까?주의
tool없음
artifacts결과에서 참조되는 모든 파일에 대해 하나 이상의 아티팩트 개체를 포함하는 배열입니다.
results없음
newLineSequences없음
columnKind없음
properties속성 사전에는 CodeQL CLI에 전달된 형식 지정자를 식별하는 semmle.formatSpecifier가 포함됩니다.

tool 개체

JSON 속성 이름항상 생성하시겠습니까?주의
driver없음

toolComponent 개체

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

reportingDescriptor 개체(규칙용)

reportingDescriptor 개체는 SARIF 사양의 여러 위치에서 사용할 수 있습니다. reportingDescriptortoolComponent 개체의 규칙 배열에 포함되면 다음과 같은 속성을 갖습니다.

JSON 속성 이름항상 생성하시겠습니까?주의
id일반적으로 language/rule-name 형식(예: cpp/unsafe-format-string)인 규칙을 정의하는 쿼리에 지정된 @id 속성을 포함합니다. 조직에서 쿼리에 @opaqueid 속성을 정의하는 경우 대신 사용됩니다.
name쿼리에 지정된 @id 속성을 포함합니다. 예는 id 속성을 참조하세요.
shortDescription규칙을 정의하는 쿼리에 지정된 @name 속성을 포함합니다.
fullDescription규칙을 정의하는 쿼리에 지정된 @description 속성을 포함합니다.
defaultConfiguration사용되는 속성 집합이 true 또는 false로 설정되고 수준 속성 집합이 규칙을 정의하는 쿼리에 지정된 @severity 속성에 따라 설정된 reportingConfiguration 개체입니다. @severity 속성이 지정되지 않은 경우 생략됩니다.

artifact 개체

JSON 속성 이름항상 생성하시겠습니까?주의
locationartifactLocation 개체입니다.
indexartifact 개체의 인덱스입니다.
contents--sarif-add-file-contents 플래그를 사용하여 결과가 생성되고 SARIF 파일이 생성될 때 소스 코드를 사용할 수 있는 경우 contents 속성은 text 속성이 설정된 artifactContent 개체로 채워집니다.

artifactLocation 개체

JSON 속성 이름항상 생성하시겠습니까?주의
uri없음
index없음
uriBaseId파일이 분석 컴퓨터의 루트 원본 위치와 같은 알려진 추상 위치를 기준으로 하는 경우 이 속성이 설정됩니다.

result 개체

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

JSON 속성 이름항상 생성하시겠습니까?주의
ruleIdreportingDescriptor 개체(규칙용)의 id 속성에 대한 설명을 참조하세요.
ruleIndex없음
message이 위치에서 발생하는 문제를 설명하는 메시지입니다. 이 메시지는 relatedLocations 속성의 위치를 참조하는 링크를 포함하는 SARIF "자리 표시자가 있는 메시지"일 수 있습니다.
locations하나의 location 개체를 포함하는 배열입니다.
partialFingerprints이름이 지정된 지문 유형에서 지문까지 사전입니다. 여기에는 최소한 기본 위치의 컨텍스트에 따라 지문을 제공하는 primaryLocationLineHash 값이 포함됩니다.
codeFlows이 결과에 대한 규칙을 정의하는 쿼리가 @kind path-problem인 경우 이 배열은 하나 이상의 codeFlow 개체로 채워질 수 있습니다.
relatedLocations이 결과에 대한 규칙을 정의하는 쿼리에 자리 표시자 옵션이 있는 메시지가 있는 경우 이 배열이 채워집니다. 각 고유한 위치는 한 번 포함됩니다.
suppressions결과가 표시되지 않으면 @kind 속성이 IN_SOURCE로 설정된 하나의 suppression 개체를 포함합니다. 이 결과가 표시되지만 표시되지 않는 결과가 하나 이상 있는 경우에는 빈 배열로 설정되고, 그렇지 않으면 설정되지 않습니다.

location 개체

JSON 속성 이름항상 생성하시겠습니까?주의
physicalLocation없음
idresult 개체의 relatedLocations 배열에 나타나는 location 개체는 id 속성을 포함될 수 있습니다.
messagelocation 개체는 다음과 같은 경우 message 속성을 포함할 수 있습니다.

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

- threadFlowLocation.location 속성에 나타나는 경우

physicalLocation 개체

JSON 속성 이름항상 생성하시겠습니까?주의
artifactLocation없음
region주어진 physicalLocation이 텍스트 파일(예: 소스 코드 파일)에 있는 경우 region 속성이 있을 수 있습니다.
contextRegion이 위치에 연결된 snippet이 있는 경우 존재할 수 있습니다.

region 개체

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

  • 줄/열 오프셋 영역

  • 문자 오프셋 및 길이 영역

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

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

JSON 속성 이름항상 생성하시겠습니까?주의
startLine없음
startColumn기본값 1과 같으면 포함되지 않습니다.
endLinestartLine과 동일하면 포함되지 않습니다.
endColumn없음
snippet없음

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

JSON 속성 이름항상 생성하시겠습니까?주의
charOffsetstartLine, startColumn, endLine, 및 endColumn이 채워지지 않은 경우 제공됩니다.
charLengthstartLine, startColumn, endLine, 및 endColumn이 채워지지 않은 경우 제공됩니다.
snippet없음

codeFlow 개체

JSON 속성 이름항상 생성하시겠습니까?주의
threadFlows없음

threadFlow 개체

JSON 속성 이름항상 생성하시겠습니까?주의
locations없음

threadFlowLocation 개체

JSON 속성 이름항상 생성하시겠습니까?주의
location없음