작업 영역 신뢰 확장 프로그램 가이드
작업 영역 신뢰란 무엇인가요?
작업 영역 신뢰는 사용자가 VS Code에서 작업 영역을 열 때 의도하지 않은 코드 실행과 관련된 보안 위험에 따라 제공되는 기능입니다. 예를 들어, 언어 확장 프로그램이 기능을 제공하기 위해 현재 로드된 작업 영역의 코드를 실행할 수 있다고 가정해 보겠습니다. 이 시나리오에서는 사용자가 작업 영역의 내용이 악의적이지 않다고 신뢰해야 합니다. 작업 영역 신뢰는 VS Code 내에서 이 결정을 중앙 집중화하고 자동 코드 실행을 방지하기 위한 제한 모드를 지원하여 확장 프로그램 작성자가 이 인프라를 직접 처리할 필요가 없도록 합니다. VS Code는 코드를 확장 프로그램 전반에 중복할 필요 없이 확장 프로그램을 신속하게 온보딩하기 위한 정적 선언 및 API 지원을 제공합니다.
온보딩
정적 선언
확장 프로그램의 package.json에서 VS Code는 다음과 같은 새로운 capabilities 속성 untrustedWorkspaces를 지원합니다.
capabilities:
untrustedWorkspaces:
{ supported: true } |
{ supported: false, description: string } |
{ supported: 'limited', description: string, restrictedConfigurations?: string[] }
supported 속성의 경우 다음 값이 허용됩니다.
true- 확장 프로그램은 작업 영역 신뢰 없이 기능을 수행할 필요가 없으므로 제한 모드에서 완전히 지원됩니다. 이전과 동일하게 활성화됩니다.false- 확장 프로그램은 작업 영역 신뢰 없이는 작동할 수 없으므로 제한 모드에서 지원되지 않습니다. 작업 영역 신뢰가 부여될 때까지 비활성 상태로 유지됩니다.'limited'- 확장 프로그램의 일부 기능은 제한 모드에서 지원됩니다. 신뢰에 민감한 기능은 작업 영역 신뢰가 부여될 때까지 비활성화해야 합니다. 확장 프로그램은 VS Code API를 사용하여 이러한 기능을 숨기거나 비활성화할 수 있습니다. 작업 영역 설정은restrictedConfigurations속성을 사용하여 신뢰에 따라 자동으로 제한될 수 있습니다.
description 속성의 경우 사용자가 어떤 기능이 비활성화될 것인지 또는 작업 영역 신뢰를 부여하거나 거부하기 전에 검토해야 하는 사항을 이해하도록 돕기 위해 신뢰가 필요한 이유에 대한 설명이 제공되어야 합니다. supported가 true로 설정된 경우 이 속성은 무시됩니다.
description 속성의 값은 지역화를 위해 package.nls.json에 추가한 다음 package.json 파일에서 참조해야 합니다.
restrictedConfigurations 속성은 설정 ID 배열을 사용합니다. 나열된 설정의 경우 확장 프로그램은 신뢰할 수 없는 작업 영역에 대해 제한 모드에서 작업 영역 정의 값을 받지 않습니다.
제한 모드를 지원하는 방법은 무엇인가요?
확장 프로그램 작성자가 작업 영역 신뢰의 범위와 제한 모드에서 안전한 기능 유형을 이해하도록 돕기 위해 고려해야 할 질문 목록입니다.
제 확장 프로그램에 주요 진입점이 있나요?
확장 프로그램에 main 진입점(예: 테마 및 언어 문법)이 없는 경우 확장 프로그램은 작업 영역 신뢰를 필요로 하지 않습니다. 확장 프로그램 작성자는 이러한 확장 프로그램에 대해 아무런 조치도 취할 필요가 없습니다. 이러한 확장 프로그램은 작업 영역이 신뢰할 수 있는지 여부에 관계없이 계속 작동합니다.
제 확장 프로그램이 기능을 제공하기 위해 열린 작업 영역의 파일에 의존하나요?
이는 작업 영역에서 설정할 수 있는 설정이나 작업 영역의 실제 코드와 같은 것을 의미할 수 있습니다. 확장 프로그램이 작업 영역의 내용을 전혀 사용하지 않는다면 신뢰를 필요로 하지 않을 가능성이 높습니다. 그렇지 않은 경우 다른 질문을 살펴보세요.
제 확장 프로그램이 작업 영역의 내용을 코드로 취급하나요?
가장 일반적인 예는 로컬 작업 영역에 저장된 Node.js 모듈과 같은 프로젝트의 작업 영역 종속성을 사용하는 것입니다. 악의적인 작업 영역에서 손상된 버전의 모듈을 체크인할 수 있습니다. 따라서 이는 사용자 및 확장 프로그램에 대한 보안 위험입니다. 또한 확장 프로그램은 확장 프로그램 또는 다른 모듈의 동작을 제어하는 JavaScript 또는 기타 구성 파일에 의존할 수 있습니다. 오류 보고를 위해 열린 코드 파일의 출력을 결정하기 위해 실행하는 것과 같은 다른 예가 많이 있습니다.
제 확장 프로그램이 작업 영역에서 정의할 수 있는 코드 실행을 결정하는 설정을 사용하나요?
확장 프로그램은 설정 값을 확장 프로그램이 실행하는 CLI의 플래그로 사용할 수 있습니다. 이러한 설정이 악의적인 작업 영역에 의해 재정의되면 확장 프로그램에 대한 공격 벡터로 사용될 수 있습니다. 반면에 설정 값이 특정 조건을 감지하는 데만 사용된다면 보안 위험이 아니며 작업 영역 신뢰를 필요로 하지 않을 수 있습니다. 예를 들어, 확장 프로그램은 선호하는 셸 설정의 값이 bash 또는 pwsh인지 확인하여 어떤 문서를 표시할지 결정할 수 있습니다. 아래의 구성(설정) 섹션에는 확장 프로그램에 대한 최적의 구성을 찾는 데 도움이 되는 설정에 대한 지침이 있습니다.
이는 작업 영역 신뢰를 필요로 할 수 있는 모든 경우를 망라한 목록은 아닙니다. 더 많은 확장 프로그램을 검토함에 따라 이 목록을 업데이트할 것입니다. 작업 영역 신뢰를 고려할 때 확장 프로그램이 수행할 수 있는 유사한 동작을 생각하기 위해 이 목록을 사용하십시오.
제 확장 프로그램에 대한 변경 사항을 적용하지 않으면 어떻게 되나요?
위에 언급한 대로 package.json에 아무것도 기여하지 않는 확장 프로그램은 작업 영역 신뢰를 지원하지 않는 것으로 간주됩니다. 작업 영역이 제한 모드일 때 비활성화되며 사용자는 일부 확장 프로그램이 작업 영역 신뢰로 인해 작동하지 않는다는 알림을 받게 됩니다. 이 조치는 사용자에게 가장 보안에 민감한 접근 방식입니다. 이것이 기본값이지만, 확장 프로그램 작성자로서 사용자와 확장 프로그램을 악의적인 작업 영역 콘텐츠로부터 보호하기 위해 노력했음을 나타내는 적절한 값을 설정하는 것이 좋습니다.
작업 영역 신뢰 API
위에 설명된 대로 API를 사용하는 첫 번째 단계는 package.json에 정적 선언을 추가하는 것입니다. 온보딩을 위한 가장 쉬운 방법은 supported 속성에 false 값을 사용하는 것입니다. 다시 말하지만, 아무것도 하지 않아도 이것이 기본 동작이지만, 사용자가 의도적인 선택을 했다는 좋은 신호입니다. 이 경우 확장 프로그램은 다른 작업을 할 필요가 없습니다. 신뢰가 부여될 때까지 활성화되지 않으며, 확장 프로그램은 사용자 동의하에 실행되고 있음을 알게 됩니다. 그러나 확장 프로그램이 기능의 일부에 대해서만 신뢰를 필요로 하는 경우 이는 최선의 옵션이 아닐 가능성이 높습니다.
기능을 작업 영역 신뢰에 따라 제한하려는 확장 프로그램의 경우 supported 속성에 'limited' 값을 사용해야 하며, VS Code는 다음 API를 제공합니다.
export namespace workspace {
/**
* When true, the user has explicitly trusted the contents of the workspace.
*/
export const isTrusted: boolean;
/**
* Event that fires when the current workspace has been trusted.
*/
export const onDidGrantWorkspaceTrust: Event<void>;
}
isTrusted 속성을 사용하여 현재 작업 영역이 신뢰할 수 있는지 확인하고 onDidGrantWorkspaceTrust 이벤트를 사용하여 작업 영역에 신뢰가 부여될 때를 수신 대기합니다. 이 API를 사용하여 특정 코드 경로를 차단하고 작업 영역이 신뢰된 후 필요한 등록을 수행할 수 있습니다.
VS Code는 아래에 설명된 대로 when 절에서 사용할 수 있는 isWorkspaceTrusted 컨텍스트 키도 노출합니다.
기여 포인트
명령, 보기 또는 기타 UI
사용자가 작업 영역을 신뢰하지 않은 경우 제한된 기능으로 코드 브라우징에 적합한 제한 모드에서 작동하게 됩니다. 제한 모드에서 비활성화하는 모든 기능은 사용자로부터 숨겨야 합니다. 이는 when 절 컨텍스트 및 isWorkspaceTrusted 컨텍스트 키를 통해 수행할 수 있습니다. UI에 표시되지 않더라도 명령을 호출할 수 있으므로 확장 프로그램 코드에서 위 API를 기반으로 명령 실행을 차단하거나 등록하지 않아야 합니다.
구성(설정)
먼저 설정을 검토하여 신뢰를 고려해야 하는지 여부를 결정해야 합니다. 위에서 설명한 대로 작업 영역은 확장 프로그램이 사용하는 설정에 대해 악의적인 값을 정의할 수 있습니다. 취약한 설정을 식별하는 경우 supported 속성에 'limited'를 사용하고 restrictedConfigurations 배열에 설정 ID를 나열해야 합니다.
restrictedConfigurations 배열에 설정 ID를 추가하면 VS Code는 제한 모드에서 사용자 정의 설정 값만 반환합니다. 그러면 확장 프로그램은 설정을 처리하기 위해 추가 코드 변경을 할 필요가 없습니다. 신뢰가 부여되면 작업 영역 신뢰 이벤트 외에도 구성 변경 이벤트가 발생합니다.
디버그 확장 프로그램
VS Code는 제한 모드에서 디버깅을 방지합니다. 이러한 이유로 디버깅 확장 프로그램은 일반적으로 신뢰를 요구할 필요가 없으며 supported 속성에 true를 선택해야 합니다. 그러나 확장 프로그램이 내장 디버깅 흐름의 일부가 아닌 추가 기능, 명령 또는 설정을 제공하는 경우 'limited'를 사용하고 위의 지침을 따라야 합니다.
작업 제공자
디버깅과 유사하게 VS Code는 제한 모드에서 작업을 실행하는 것을 방지합니다. 확장 프로그램이 내장 작업 흐름의 일부가 아닌 추가 기능, 명령 또는 설정을 제공하는 경우 'limited'를 사용하고 위 지침을 따라야 합니다. 그렇지 않으면 supported: true를 지정할 수 있습니다.
작업 영역 신뢰 테스트
작업 영역 신뢰 활성화 및 구성에 대한 자세한 내용은 작업 영역 신뢰 사용자 가이드를 참조하십시오.