XAML 보안 고려 사항

이 문서에서는 XAML 및 .NET XAML 서비스 API를 사용하는 경우 애플리케이션의 보안에 대한 모범 사례를 설명합니다.

애플리케이션에서 신뢰할 수 없는 XAML

가장 일반적인 의미에서 신뢰할 수 없는 XAML은 애플리케이션이 특별히 포함하거나 내보내지 않은 XAML 원본입니다.

신뢰할 수 있고 서명된 어셈블리 내에서 resx 유형 리소스로 컴파일되거나 저장되는 XAML은 본질적으로 신뢰할 수 없습니다. 어셈블리 전체를 신뢰하는 만큼 XAML을 신뢰할 수 있습니다. 대부분의 경우 스트림 또는 기타 I/O에서 로드하는 XAML 원본인 느슨한 XAML의 신뢰 측면에만 관심이 있습니다. 느슨한 XAML은 배포 및 패키징 인프라가 있는 애플리케이션 모델의 특정 구성 요소 또는 기능이 아닙니다. 그러나 어셈블리는 느슨한 XAML 로드와 관련된 동작을 구현할 수 있습니다.

신뢰할 수 없는 XAML의 경우 일반적으로 신뢰할 수 없는 코드인 것처럼 처리해야 합니다. 샌드박싱 또는 기타 비유를 사용하여 신뢰할 수 없는 XAML이 신뢰할 수 있는 코드에 액세스하지 못하도록 방지합니다.

XAML 기능의 특성은 XAML에 개체를 생성하고 해당 속성을 설정할 수 있는 권한을 부여합니다. 이러한 기능에는 형식 변환기 액세스, 애플리케이션 도메인의 어셈블리 매핑 및 액세스, 태그 확장, x:Code 블록 사용 등이 포함됩니다.

XAML은 언어 수준 기능 외에도 많은 기술에서 UI 정의에 사용됩니다. 신뢰할 수 없는 XAML을 로드하는 것은 악의적인 스푸핑 UI를 로드하는 것을 의미할 수 있습니다.

읽기 판독기와 작성기 간에 컨텍스트 공유

XAML 판독기 및 XAML 작성기용 .NET XAML 서비스 아키텍처에서는 XAML 판독기를 XAML 작성기와 공유하거나 공유 XAML 스키마 컨텍스트가 필요한 경우가 많습니다. XAML 노드 루프 논리를 작성하거나 사용자 지정 저장 경로를 제공하는 경우 개체 또는 컨텍스트 공유가 필요할 수 있습니다. 신뢰할 수 있는 코드와 신뢰할 수 없는 코드 간에 XAML 판독기 인스턴스, 기본이 아닌 XAML 스키마 컨텍스트 또는 XAML 판독기/작성기 클래스에 대한 설정을 공유하지 마세요.

CLR 기반 형식 백업에 대한 XAML 개체 작성과 관련된 대부분의 시나리오 및 작업은 기본 XAML 스키마 컨텍스트를 사용할 수 있습니다. 기본 XAML 스키마 컨텍스트에는 완전 신뢰를 손상시킬 수 있는 설정이 명시적으로 포함되지 않습니다. 따라서 신뢰할 수 있는 XAML 판독기/작성기 구성 요소 간에 컨텍스트를 공유하는 것이 안전합니다. 단, 그렇게 하는 경우에도 이러한 판독기와 작성기를 별도의 AppDomain 범위로 유지하면서 그 중 하나는 부분 신뢰를 위해 특별히 의도된/샌드박스로 처리하는 것이 좋습니다.

XAML 네임스페이스 및 어셈블리 신뢰

XAML이 사용자 지정 XAML 네임스페이스 매핑을 어셈블리로 해석하는 방법에 대한 기본 정규화되지 않은 구문 및 정의는 애플리케이션 도메인에 로드된 신뢰할 수 있는 어셈블리와 신뢰할 수 없는 어셈블리를 구분하지 않습니다. 따라서 신뢰할 수 없는 어셈블리가 신뢰할 수 있는 어셈블리의 의도된 XAML 네임스페이스 매핑을 스푸핑하고 XAML 원본의 선언된 개체 및 속성 정보를 캡처하는 것이 기술적으로 가능합니다. 이러한 상황을 방지하기 위한 보안 요구 사항이 있는 경우 다음 기술 중 하나를 사용하여 의도한 XAML 네임스페이스 매핑을 만들어야 합니다.

  • 애플리케이션의 XAML에서 만든 모든 XAML 네임스페이스 매핑에서 강력한 이름의 정규화된 어셈블리 이름을 사용합니다.

  • XAML 판독기 및 XAML 개체 작성기에 대한 특정 XamlSchemaContext를 구성하여 어셈블리 매핑을 고정된 참조 어셈블리 집합으로 제한합니다. XamlSchemaContext(IEnumerable<Assembly>)을 참조하세요.

XAML 형식 매핑 및 형식 시스템 액세스

XAML은 여러 가지 면에서 CLR이 기본 CLR 형식 시스템을 구현하는 방법에 대한 피어인 자체 형식 시스템을 지원합니다. 그러나 형식 정보에 따라 형식에 대한 신뢰 결정을 내리는 형식 인식의 특정 측면의 경우 CLR 지원 형식의 형식 정보를 연기해야 합니다. XAML 형식 시스템의 특정 보고 기능 중 일부는 가상 메서드로 열려 있으므로 원래 .NET XAML 서비스 구현에서 완전히 제어되지 않기 때문입니다. 이러한 확장성 지점은 XAML 형식 시스템이 확장 가능하기 때문에 XAML 자체의 확장성 및 가능한 대체 형식 매핑 전략과 기본 CLR 지원 구현 및 기본 XAML 스키마 컨텍스트와 일치하기 때문에 존재합니다. 자세한 내용은 XamlTypeXamlMember의 여러 속성에 대한 특정 참고 사항을 참조하십시오.

참고 항목