Skip to main content

CodeQL CLI SARIF 출력

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

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

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

참고: 이 문서는 2023년 1월에 CodeQL 설명서 웹 사이트에서 마이그레이션되었습니다.

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단일 언어에 대한 단일 실행 개체를 포함하는 array입니다.

run 개체

JSON 속성 이름항상 생성하시겠습니까?주의
tool없음
originalUriBaseIds분석 컴퓨터의 원래 위치를 나타내는 artifactLocations에 대한 uriBaseIds 사전입니다. 여기에는 최소한 분석된 프로젝트에 대한 소스 코드의 분석 컴퓨터에 있는 루트 위치를 나타내는 %SRCROOT% uriBaseId 항목이 포함됩니다. 각 artifactLocation에는 uridescription 속성이 포함됩니다.
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 사양의 여러 위치에서 사용할 수 있습니다. reportingDescriptor이(가) toolComponent 개체의 규칙 배열에 포함되는 경우 다음과 같은 속성이 있습니다.

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

- result 개체의 relatedLocations 배열에 message 속성이 포함될 수 있습니다.

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

physicalLocation 개체

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

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없음