Windows Presentation Foundation 보안

업데이트: 2007년 11월

이 항목에서는 WPF(Windows Presentation Foundation) 독립 실행형 응용 프로그램과 브라우저에서 호스팅되는 응용 프로그램의 보안 모델을 설명합니다.

WPF 독립 실행형 응용 프로그램은 Windows Installer(.msi), DOS XCopy 또는 ClickOnce를 사용하여 배포되었는지 여부에 상관없이 무제한 권한(CAS FullTrust 권한 집합)과 함께 실행됩니다.

브라우저에서 호스팅되는 WPF 응용 프로그램은 Windows Internet Explorer에 의해 호스팅되며 XBAP(XAML 브라우저 응용 프로그램) 또는 느슨한 XAML(Extensible Application Markup Language)일 수 있습니다(Windows Presentation Foundation XAML 브라우저 응용 프로그램 개요 참조).

기본적으로 브라우저에서 호스팅되는 WPF 응용 프로그램은 기본 CAS Internet 권한 집합으로 제한되는 부분 신뢰 보안 샌드박스 내에서 실행됩니다. 이 경우 일반 웹 응용 프로그램이 격리될 것으로 예상할 때와 동일한 방식으로 브라우저에서 호스팅되는 WPF 응용 프로그램이 실제로 클라이언트 시스템에서 격리됩니다. 부분 신뢰 보안은 Windows Presentation Foundation 부분 신뢰 보안에 자세히 설명되어 있습니다.

이 항목에는 다음 단원이 포함되어 있습니다.

  • 안전한 탐색
  • Internet Explorer 보안 설정
  • 부분적으로 신뢰할 수 있는 클라이언트 응용 프로그램에 대해 APTCA 어셈블리 사용 안 함
  • 외부의 느슨한 XAML 샌드박싱
  • 보안 WPF 응용 프로그램 개발을 위한 최선의 구현 방법
  • 관련 항목

안전한 탐색

XBAP의 경우 WPF는 두 가지 유형의 탐색 범위인 응용 프로그램과 브라우저를 구별합니다.

응용 프로그램 탐색은 브라우저에서 호스팅하는 응용 프로그램 내의 컨텐츠 항목 간 탐색이고 브라우저 탐색은 브라우저 자체의 내용을 변경하는 탐색입니다. 다음 그림에서는 응용 프로그램 범위 및 브라우저 범위 탐색 간의 관계를 보여 줍니다.

탐색 다이어그램

XBAP에서 탐색하기에 안전하다고 간주되는 콘텐츠 형식은 주로 응용 프로그램 탐색이 발생하는지 아니면 브라우저 탐색이 발생하는지 여부에 의해 결정됩니다.

응용 프로그램 탐색 보안

다음 네 가지 형식의 콘텐츠를 지원하는 팩 URI로 식별할 수 있는 경우 응용 프로그램 범위 탐색은 안전한 것으로 간주됩니다.

  • 리소스 파일 - 빌드 형식이 Resource인 프로젝트에 추가되고 다음과 같은 URI로 식별할 수 있는 파일

    pack://application:,,,/MyResourceFile.xaml

  • 콘텐츠 파일 - 빌드 형식이 Content인 프로젝트에 추가되고 다음과 같은 URI로 식별할 수 있는 파일

    pack://application:,,,/MyContentFile.xaml

  • 원본 사이트 파일 - 빌드 형식이 None인 프로젝트에 추가되고 다음과 같은 URI로 식별할 수 있는 파일

    pack://siteoforigin:,,,/MySiteOfOriginFile.xaml

  • 응용 프로그램 코드 파일 - 빌드 형식이 Page인 프로젝트에 추가되고 다음과 같은 URI로 식별할 수 있는 파일

    pack://application:,,,/MyResourceFile.xaml

참고

응용 프로그램 데이터 파일 및 팩 URI에 대한 자세한 내용은 Windows Presentation Foundation 응용 프로그램 리소스, 콘텐츠 및 데이터 파일을 참조하십시오.

이러한 콘텐츠 형식의 파일은 사용자 탐색 또는 프로그래밍 방식 탐색의 결과로 찾을 수 있습니다.

  • 사용자 탐색. 사용자가 Hyperlink 요소를 클릭하여 탐색을 시작합니다.

  • 프로그래밍 방식 탐색. 사용자 개입 없이 응용 프로그램이 탐색을 시작합니다.

브라우저 탐색 보안

브라우저 탐색은 다음 조건 하에서만 안전한 것으로 간주됩니다.

  • 사용자 탐색. 사용자가 Hyperlink 요소를 클릭하여 탐색을 시작합니다.

  • 영역. 탐색하는 콘텐츠가 인터넷 또는 로컬 인트라넷에 있습니다.

  • 프로토콜. 사용 중인 프로토콜이 http:, https:, file: 또는 **mailto:**입니다.

XBAP가 이러한 조건을 충족하지 않는 방식으로 콘텐츠를 탐색하려고 할 경우 SecurityException이 발생합니다.

Internet Explorer 보안 설정

Internet Explorer에서 제공되는 메커니즘을 사용하면 다음을 비롯하여 Internet Explorer에서 실행이 허용되는 기능을 구성할 수 있습니다.

  • .NET Framework 기반 구성 요소

  • ActiveX 문서 및 플러그 인

  • 다운로드

  • 스크립팅

  • 사용자 인증

기능을 실행할 수 있는지 여부 및 기능이 실행되는 방법은 보안 설정에 의해 결정됩니다. 보안 설정을 구성하여 기능을 완전히 사용하거나 사용하지 않도록 설정하거나, 또는 기능이 실행되려고 할 때마다 사용자가 결정하도록 메시지를 표시할 수 있습니다.

이 방법으로 보안 설정할 수 있는 기능 컬렉션은 인터넷, 인트라넷, 신뢰할 수 있는 사이트신뢰할 수 없는 사이트 영역에서 영역 단위로 구성됩니다. 다음을 수행하여 보안 설정을 구성할 수 있습니다.

  1. Internet Explorer를 엽니다.

  2. 도구 메뉴에서 옵션 | 보안을 클릭합니다.

  3. 보안 설정을 구성할 영역을 선택합니다.

  4. 사용자 지정 수준 단추를 클릭합니다.

선택한 영역의 보안 설정을 구성하기 위한 보안 설정 대화 상자가 열립니다.

보안 설정 대화 상자

Windows Internet Explorer 7에는 특히 .NET Framework에 대한 네 개의 보안 설정이 포함되어 있습니다.

  • 느슨한 XAML. Internet Explorer 7에서 XAML 파일을 탐색하여 느슨하게 하는지 여부를 제어합니다. 사용, 사용 안 함 및 확인 옵션이 있습니다.

  • XAML 브라우저 응용 프로그램. Internet Explorer 7에서 XBAP를 탐색하여 실행하는지 여부를 제어합니다. 사용, 사용 안 함 및 확인 옵션이 있습니다.

  • XPS 문서. Internet Explorer 7에서 XPS(XML Paper Specification) 문서를 탐색하여 로드할 수 있는지 여부를 제어합니다. 사용, 사용 안 함 및 확인 옵션이 있습니다.

  • .NET Framework 설치 사용. Internet Explorer 7을 통해 .NET Framework을 설치할 수 있는지 여부를 제어합니다. 사용 또는 사용 안 함 옵션만 있습니다.

  • 기본적으로 이러한 설정은 인터넷, 로컬 인터넷신뢰할 수 있는 사이트 영역의 경우 사용하도록 설정되고 신뢰할 수 없는 사이트 영역의 경우 사용하지 않도록 설정됩니다.

IE6 이하 버전의 보안 설정

Internet Explorer이 아닌 Internet Explorer 버전의 경우 다양한 .NET Framework 관련 보안 설정에 대한 보안 설정을 레지스트리의 다음 키에서 구성할 수 있습니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features

다음 표에서는 설정할 수 있는 값 목록을 보여 줍니다.

값 이름

값 형식

값 데이터

XBAPDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

LooseXamlDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

WebBrowserDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

XPSDocumentsDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

MediaAudioDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

MediaImageDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

MediaVideoDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

참고

이러한 설정 중에서 XBAPDisallowWebBrowserDisallow는 모든 버전의 Internet Explorer에서 작동합니다.

부분적으로 신뢰할 수 있는 클라이언트 응용 프로그램에 대해 APTCA 어셈블리 사용 안 함

관리되는 어셈블리가 GAC(전역 어셈블리 캐시)에 설치되는 경우 사용자는 설치를 위해 명시적 권한을 제공해야 하기 때문에 이러한 어셈블리는 완전히 신뢰할 수 있게 됩니다. 이러한 어셈블리는 완전히 신뢰할 수 있으므로 완전히 신뢰할 수 있는 관리되는 클라이언트 응용 프로그램에서만 사용할 수 있습니다. 부분적으로 신뢰할 수 있는 응용 프로그램에서 이러한 어셈블리를 사용하게 하려면 AllowPartiallyTrustedCallersAttribute(APTCA)로 표시해야 합니다. 부분 신뢰에서 안전하게 실행할 수 있는 것으로 테스트된 어셈블리만 이 특성으로 표시해야 합니다.

그러나 APTCA 어셈블리는 GAC에 설치된 후 보안 결함을 드러낼 수 있습니다. 보안 결함이 발견되고 나면 어셈블리 게시자는 기존 설치에서 문제를 수정하는 동시에 문제 발견 후 수행되는 설치를 보호하기 위한 패치를 생성할 수 있습니다. 패치의 한 옵션은 어셈블리를 제거하는 것이지만 이 경우 완전히 신뢰할 수 있는 다른 클라이언트 응용 프로그램이 어셈블리를 사용하지 못하게 될 수 있습니다.

WPF는 APTCA 어셈블리를 제거하지 않고 XBAP를 비롯한 부분적으로 신뢰할 수 있는 WPF 응용 프로그램에 대해 APTCA 어셈블리를 사용하지 않도록 설정하는 메커니즘을 제공합니다.

APTCA 어셈블리를 사용하지 않도록 설정하려면 다음 레지스트리 키 아래에 특수한 키를 만들어야 합니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\<AssemblyFullName>, FileVersion=<AssemblyFileVersion>

다음은 예제 키입니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\aptcagac, Version=1.0.0.0, Culture=neutral, PublicKeyToken=215e3ac809a0fea7, FileVersion=1.0.0.0

이렇게 하면 APTCA 어셈블리에 대한 항목이 만들어집니다. 단, 어셈블리를 사용하거나 사용하지 않게 설정하는 값을 이 키 아래에 만들어야 합니다. 만들어야 하는 값의 세부 정보는 다음과 같습니다.

  • 값 이름: APTCA_FLAG

  • 값 형식: REG_DWORD

  • 값 데이터: 1(사용 안 함), 0(사용)

부분적으로 신뢰할 수 있는 클라이언트 응용 프로그램에 대해 이 방법으로 사용하지 않게 설정해야 하는 어셈블리의 게시자는 패치를 작성하여 어셈블리에 대한 레지스트리 키 및 값 항목을 만들 수 있습니다.

참고

핵심 .NET Framework 어셈블리는 관리되는 응용 프로그램을 실행하는 데 필요하므로 이 방법으로 사용하지 않게 설정해도 영향을 받지 않습니다. APTCA 어셈블리를 사용하지 않게 설정하는 기능은 주로 .NET Framework이 아니거나 타사 제품인 경우를 대상으로 합니다.

외부의 느슨한 XAML 샌드박싱

느슨한 XAML 파일은 팩 URI에 의해 식별할 수 없는 태그 전용 .xaml 파일입니다(Windows Presentation Foundation의 Pack URI 참조). 이는 리소스, 콘텐츠 또는 원본 사이트 파일이 아니라는 것을 의미합니다(Windows Presentation Foundation 응용 프로그램 리소스, 콘텐츠 및 데이터 파일 참조).

Internet Explorer에서 느슨한 XAML 파일로 직접 탐색할 경우 기본 인터넷 영역 권한 집합에 의해 이러한 파일이 보안 샌드박싱됩니다.

그러나 독립 실행형 응용 프로그램의 NavigationWindow 또는 Frame에서 느슨한 XAML 파일로 탐색할 경우 보안 동작이 다릅니다.

두 경우 모두에 탐색한 느슨한 XAML 파일은 호스트 응용 프로그램의 권한을 상속합니다. 그러나 특히 느슨한 XAML 파일이 신뢰할 수 없거나 알려지지 않은 엔터티에 의해 생성된 경우 이 동작은 보안 관점에서 바람직하지 않습니다. 이 형식의 콘텐츠는 외부 콘텐츠로 알려져 있으며 탐색한 경우 해당 파일을 격리시키도록 FrameNavigationWindow 모두를 구성할 수 있습니다. FrameNavigationWindow에 대한 다음 예제와 같이 SandboxExternalContent 속성을 true로 설정하여 격리를 수행할 수 있습니다.

<Frame 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</Frame>
<!-- Sandboxing external content using NavigationWindow-->
<NavigationWindow 
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</NavigationWindow>

이 설정을 사용하면 응용 프로그램을 호스팅하는 중인 프로세스와 별개인 프로세스에 외부 콘텐츠가 로드됩니다. 이 프로세스는 기본 인터넷 영역 권한 집합으로 제한되므로 호스팅 응용 프로그램 및 클라이언트 시스템에서 효율적으로 격리됩니다.

보안 WPF 응용 프로그램 개발을 위한 최선의 구현 방법

보안 설정된 WPF용 응용 프로그램을 빌드하려면 다음을 위한 최선의 구현 방법이 필요합니다.

참고 항목

개념

Windows Presentation Foundation 부분 신뢰 보안

WPF(Windows Presentation Foundation) 보안 전략 - 플랫폼 보안

Windows Presentation Foundation 보안 전략 - 보안 엔지니어링

ClickOnce 배포 개요

XAML 개요

기타 리소스

Patterns and Practices Security Guidance for Applications

코드 액세스 보안