Skip to main content
설명서에 자주 업데이트를 게시하며 이 페이지의 번역이 계속 진행 중일 수 있습니다. 최신 정보는 영어 설명서를 참조하세요.

CodeQL CLI SARIF 출력

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

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

GitHub Enterprise 계정 및 GitHub Advanced Security 라이선스가 있는 경우 자동화된 분석, 연속 통합 및 지속적인 업데이트에 CodeQL를 사용할 수 있습니다. 영업 팀에 문의하여 엔터프라이즈 계정을 만들 수 있습니다. 자세한 내용은 "GitHub Advanced Security 정보"을 참조하세요.

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

SARIF 출력 정보

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

SARIF 사양 및 스키마

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

메모 변경

버전 간 변경 내용

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

출력에 대한 향후 변경 내용

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

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

  • "선택 사항" 필드가 생성되는 상황이 변경될 수 있습니다. CodeQL SARIF 출력의 소비자는 이러한 필드의 존재 또는 부재에 대해 강력해야 합니다.

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

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

생성된 SARIF 개체

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

sarifLog 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

JSON 속성 이름언제 생성되나요?참고
$schemaAlwaysSARIF 스키마에 대한 링크를 제공합니다.
versionAlways출력을 생성하는 데 사용되는 SARIF의 버전입니다.
runsAlways단일 언어에 대한 단일 실행 개체를 포함하는 배열입니다.

run 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

JSON 속성 이름언제 생성되나요?참고
toolAlways
originalUriBaseIdsAlways분석 머신의 uriBaseIds 원래 위치를 나타내는 artifactLocations에 대한 사전입니다. 최소한 분석된 프로젝트에 대한 소스 코드의 분석 머신에 있는 루트 위치를 나타내는 가 포함 %SRCROOT% uriBaseId됩니다. 각각 artifactLocation 에는 및 description 속성이 uri 포함됩니다.
artifactsAlways결과에서 참조되는 모든 파일에 대해 하나 이상의 아티팩트 개체를 포함하는 배열입니다.
resultsAlways
newLineSequencesAlways
columnKindAlways
propertiesAlways속성 사전에는 CodeQL CLI에 전달된 형식 지정자를 식별하는 가 포함 semmle.formatSpecifier됩니다.

tool 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

JSON 속성 이름언제 생성되나요?참고
driverAlways

toolComponent 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

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

reportingDescriptor object(규칙의 경우)

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

JSON 속성 이름언제 생성되나요?참고
idAlways일반적으로 형식 language/rule-name (예cpp/unsafe-format-string: )인 규칙을 정의하는 쿼리에 지정된 속성을 포함합니다@id. 조직에서 쿼리에서 @opaqueid 속성을 정의하는 경우 대신 사용됩니다.
nameAlways쿼리에 @id 지정된 속성을 포함합니다. 예제는 id 위의 속성을 참조하세요.
shortDescriptionAlways규칙을 정의하는 쿼리에 지정된 속성을 포함합니다 @name .
fullDescriptionAlways규칙을 정의하는 쿼리에 지정된 속성을 포함합니다 @description .
defaultConfigurationAlwaysreportingConfiguration 사용 속성이 true 또는 false로 설정된 개체와 규칙을 정의하는 쿼리에 지정된 속성에 따라 @severity 설정된 수준 속성입니다. 속성이 지정되지 않은 경우 @severity 생략됩니다.

artifact 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

JSON 속성 이름언제 생성되나요?참고
locationAlwaysartifactLocation 개체입니다.
indexAlwaysartifact 개체의 인덱스입니다.
contents필요에 따라플래그를 --sarif-add-file-contents 사용하여 결과가 생성되고 SARIF 파일이 생성 contents 될 때 소스 코드를 사용할 수 있는 경우 속성이 속성 집합으로 개체로 artifactContent text 채워집니다.

artifactLocation 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

JSON 속성 이름언제 생성되나요?참고
uriAlways
indexAlways
uriBaseId필요에 따라파일이 분석 컴퓨터의 루트 원본 위치와 같은 알려진 추상 위치를 기준으로 하는 경우 설정됩니다.

result 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

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

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

location 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

JSON 속성 이름언제 생성되나요?참고
physicalLocationAlways
id필요에 따라location 개체의 배열에 relatedLocations 나타나는 개체에는 result 속성이 id 포함될 수 있습니다.
message필요에 따라location 개체는 다음과 같은 경우 속성을 포함할 message 수 있습니다.

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

- 속성에 threadFlowLocation.location 표시됩니다.

physicalLocation 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

JSON 속성 이름언제 생성되나요?참고
artifactLocationAlways
region필요에 따라지정된 physicalLocation 가 소스 코드 파일과 같은 텍스트 파일에 있는 경우 속성이 region 있을 수 있습니다.
contextRegion필요에 따라이 위치에 연결된 snippet가 있는 경우 이 있을 수 있습니다.

region 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

CodeQL에 의해 생성된 두 가지 유형의 region 개체가 있습니다.

  • 선/열 오프셋 영역

  • 문자 오프셋 및 길이 영역

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

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

JSON 속성 이름언제 생성되나요?참고
startLineAlways
startColumn필요에 따라기본값 1과 같으면 포함되지 않습니다.
endLine필요에 따라가 같 startLine으면 포함되지 않습니다.
endColumnAlways
snippet필요에 따라

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

JSON 속성 이름언제 생성되나요?참고
charOffset필요에 따라, , startColumnendLine``endColumn 가 채워지지 않은 경우 startLine제공됩니다.
charLength필요에 따라, , startColumnendLine``endColumn 가 채워지지 않은 경우 startLine제공됩니다.
snippet필요에 따라

codeFlow 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

JSON 속성 이름언제 생성되나요?참고
threadFlowsAlways

threadFlow 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

JSON 속성 이름언제 생성되나요?참고
locationsAlways

threadFlowLocation 개체의 멤버의 부모에 대해 SQL Server 인스턴스 이름을 표시합니다.

JSON 속성 이름언제 생성되나요?참고
locationAlways