Windows Presentation Foundation-Sicherheit

Aktualisiert: November 2007

In diesem Thema wird das Sicherheitsmodell für eigenständige und im Browser gehostete Windows Presentation Foundation (WPF)-Anwendungen erläutert.

Eigenständige WPF-Anwendungen werden mit uneingeschränkten Berechtigungen (CAS FullTrust-Berechtigungssatz) ausgeführt. Dabei ist es unerheblich, ob sie mit Windows Installer (.msi), DOS XCopy oder ClickOnce bereitgestellt wurden.

Im Browser gehostete WPF-Anwendungen werden von Windows Internet Explorer gehostet. Es handelt sich dabei entweder um XAML-Browseranwendungen (XBAPs) oder um Loose Extensible Application Markup Language (XAML) (siehe Übersicht über XAML-Browseranwendungen von Windows Presentation Foundation).

Im Browser gehostete WPF-Anwendungen werden standardmäßig in einer teilweise vertrauenswürdigen Sandbox für die Sicherheit ausgeführt, die auf den standardmäßigen CAS Internet-Berechtigungssatz beschränkt ist. Auf diese Weise werden im Browser gehostete WPF-Anwendungen auf dieselbe Weise vom Clientcomputer isoliert wie typische Webanwendungen. Weitere Informationen zur teilweisen Vertrauenswürdigkeit finden Sie unter Windows Presentation Foundation - Sicherheit bei teilweiser Vertrauenswürdigkeit.

Dieses Thema enthält folgende Abschnitte.

  • Sichere Navigation
  • Internet Explorer-Sicherheitseinstellungen
  • Deaktivieren von APTCA-Assemblys für teilweise vertrauenswürdige Clientanwendungen
  • Sandbox für externe Loose XAML
  • Bewährte Methoden für die Entwicklung sicherer WPF-Anwendungen
  • Verwandte Abschnitte

Sichere Navigation

Für XBAPs unterscheidet WPF zwei Typen von Navigationsbereichen: Anwendung und Browser.

Als Anwendungsnavigation wird die Navigation zwischen Inhaltselementen in einer Anwendung bezeichnet, die in einem Browser gehostet wird. Als Browsernavigation wird dagegen die Navigation bezeichnet, die den Inhalt des Browsers selbst ändert. Die Beziehung zwischen der Navigation im Anwendungsbereich und im Browserbereich wird in der folgenden Abbildung veranschaulicht:

Navigationsdiagramm

Der Inhaltstyp, der als sicheres Navigationsziel für eine XBAP angesehen wird, wird hauptsächlich dadurch bestimmt, ob eine Anwendungsnavigation oder eine Browsernavigation stattfindet.

Sicherheit der Anwendungsnavigation

Die Navigation im Anwendungsbereich wird als sicher betrachtet, wenn sie mit einem Paket-URI identifiziert werden kann, der vier Inhaltstypen unterstützt:

  • Ressourcendateien, die zu einem Projekt mit einem Resource-Buildtyp hinzugefügt werden und mit einem URI wie dem Folgenden identifiziert werden können:

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

  • Inhaltsdateien, die zu einem Projekt mit einem Content-Buildtyp hinzugefügt werden und mit einem URI wie dem Folgenden identifiziert werden können:

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

  • Dateien der Ursprungssite, die zu einem Projekt mit einem None-Buildtyp hinzugefügt werden und mit einem URI wie dem Folgenden identifiziert werden können:

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

  • Anwendungscodedateien, die zu einem Projekt mit einem Page-Buildtyp hinzugefügt werden und mit einem URI wie dem Folgenden identifiziert werden können:

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

Tipp

Weitere Informationen zu Anwendungsdatendateien und Paket-URIs finden Sie unter Windows Presentation Foundation-Anwendungsressource, Inhalts- und Datendateien.

Bei Dateien dieser Inhaltstypen kann bis zu einem Ergebnis navigiert werden, das entweder von einer Benutzernavigation oder einer programmgesteuerten Navigation stammt:

  • Benutzernavigation. Der Benutzer hat die Navigation verursacht, indem er auf ein Hyperlink-Element geklickt hat.

  • Programmgesteuerte Navigation. Die Anwendung hat die Navigation verursacht, ohne den Benutzer einzubinden.

Sicherheit der Browsernavigation

Die Browsernavigation wird nur unter den folgenden Bedingungen als sicher betrachtet:

  • Benutzernavigation. Der Benutzer hat die Navigation verursacht, indem er auf ein Hyperlink-Element geklickt hat.

  • Zone. Der Inhalt, durch den navigiert wird, befindet sich im Internet oder im lokalen Intranet.

  • Protokoll. Das Protokoll, das verwendet wird, ist entweder http:, https:, file: oder mailto:.

Wenn eine XBAP versucht, auf eine Weise zu Inhalten zu navigieren, die nicht diesen Bedingungen entspricht, wird eine SecurityException ausgelöst.

Internet Explorer-Sicherheitseinstellungen

Internet Explorer stellt einen Mechanismus bereit, mit dem Sie die Funktionalität konfigurieren können, deren Ausführung durch oder von Internet Explorer zulässig ist. Dazu zählt Folgendes:

  • Auf .NET Framework basierende Komponenten

  • ActiveX-Steuerelemente und Plug-Ins

  • Downloads

  • Skripterstellung

  • Benutzerauthentifizierung

Ob und wie eine Funktionalität ausgeführt werden kann, wird von einer Sicherheitseinstellung bestimmt. Sie können die Sicherheitseinstellung so einstellen, dass entweder eine Funktionalität direkt aktiviert bzw. deaktiviert wird, oder dass der Benutzer jedes Mal, wenn eine Funktionalität die Ausführung versucht, zu einer Entscheidung aufgefordert wird.

Die Auflistung der Funktionalitäten, die auf diese Weise gesichert werden können, wird auf Zonenbasis für die Zonen Internet, Intranet, Vertrauenswürdige Sites und Nicht vertrauenswürdige Sites konfiguriert. Sie können die Sicherheitseinstellungen wie folgt konfigurieren:

  1. Öffnen Sie Internet Explorer.

  2. Klicken Sie im Menü Extras auf Optionen | Sicherheit.

  3. Wählen Sie die Zone aus, für die Sie die Sicherheitseinstellungen konfigurieren möchten.

  4. Klicken Sie auf die Schaltfläche Stufe anpassen.

Das Dialogfeld Sicherheitseinstellungen wird geöffnet, in dem Sie die Sicherheitseinstellungen für die ausgewählte Zone konfigurieren können.

Dialogfeld Sicherheitseinstellungen

Windows Internet Explorer 7 enthält die folgenden vier Sicherheitseinstellungen speziell für .NET Framework:

  • Loose XAML. Steuert, ob Internet Explorer 7 zu Loose XAML-Dateien navigieren kann. (Optionen Aktivieren, Deaktivieren und Eingabeaufforderung.)

  • XAML-Browseranwendungen. Steuert, ob Internet Explorer 7 zu XBAPs navigieren und sie ausführen kann. (Optionen Aktivieren, Deaktivieren und Eingabeaufforderung.)

  • XPS-Dokumente. Steuert, ob Internet Explorer 7 zu XML Paper Specification (XPS)-Dokumenten navigieren und sie laden kann. (Optionen Aktivieren, Deaktivieren und Eingabeaufforderung.)

  • .NET Framework Setup aktivieren. Steuert, ob .NET Framework über Internet Explorer 7 installiert werden kann. (Nur Optionen Aktivieren oder Deaktivieren.)

  • Standardmäßig sind diese Einstellungen für die Zonen Internet, Lokales Intranet und Vertrauenswürdige Sites aktiviert und für die Zone Nicht vertrauenswürdige Sites deaktiviert.

Sicherheitseinstellungen für IE6 und älter

Für andere Internet Explorer-Versionen als Internet Explorer können die Sicherheitseinstellungen für verschiedene .NET Framework-bezogene Sicherheitseinstellungen über die Registrierung unter dem folgenden Schlüssel konfiguriert werden:

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

In der folgenden Tabelle sind die Werte aufgelistet, die festgelegt werden können.

Wertname

Werttyp

Wertdaten

XBAPDisallow

REG_DWORD

1 (nicht zulassen); 0 (zulassen)

LooseXamlDisallow

REG_DWORD

1 (nicht zulassen); 0 (zulassen)

WebBrowserDisallow

REG_DWORD

1 (nicht zulassen); 0 (zulassen)

XPSDocumentsDisallow

REG_DWORD

1 (nicht zulassen); 0 (zulassen)

MediaAudioDisallow

REG_DWORD

1 (nicht zulassen); 0 (zulassen)

MediaImageDisallow

REG_DWORD

1 (nicht zulassen); 0 (zulassen)

MediaVideoDisallow

REG_DWORD

1 (nicht zulassen); 0 (zulassen)

Tipp

Von diesen Einstellungen funktionieren XBAPDisallow und WebBrowserDisallow für alle Versionen von Internet Explorer.

Deaktivieren von APTCA-Assemblys für teilweise vertrauenswürdige Clientanwendungen

Wenn verwaltete Assemblys in GAC (globaler Assemblycache (GAC)) installiert werden, werden sie voll vertrauenswürdig, weil der Benutzer für die Installation eine explizite Berechtigung bereitstellen muss. Da sie voll vertrauenswürdig sind, können sie nur von voll vertrauenswürdigen verwalteten Clientanwendungen verwendet werden. Damit teilweise vertrauenswürdige Anwendungen sie verwenden können, müssen sie mit AllowPartiallyTrustedCallersAttribute (APTCA) markiert werden. Nur Assemblys, die sich in einem Test bei der Ausführung in teilweiser Vertrauenswürdigkeit als sicher erwiesen haben, sollten mit diesem Attribut markiert werden.

Eine APTCA-Assembly kann jedoch nach der Installation in GAC (GAC) einen Sicherheitsmangel aufweisen. Nachdem ein Sicherheitsmangel entdeckt wurde, können Assemblyherausgeber einen Patch erzeugen, um das Problem in vorhandenen Installationen zu beheben und Installationen zu schützen, die nach der Entdeckung des Problems erfolgen. Der Patch kann die Assembly deinstallieren, was jedoch zur Unterbrechung anderer voll vertrauenswürdiger Clientanwendungen führen kann, die diese Assembly verwenden.

WPF stellt einen Mechanismus bereit, mit dem eine APTCA-Assembly für teilweise vertrauenswürdige WPF-Anwendungen, einschließlich XBAPs, deaktiviert werden kann, ohne die APTCA-Assembly zu deinstallieren.

Um eine APTCA-Assembly zu deaktivieren, müssen Sie unter dem folgenden Registrierungsschlüssel einen speziellen Schlüssel erstellen:

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

Im Folgenden wird ein Beispielschlüssel angezeigt:

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

Hiermit wird ein Eintrag für die APTCA-Assembly erstellt. Sie müssen jedoch auch einen Wert unter diesem Schlüssel erstellen, der die Assembly aktiviert/deaktiviert. Es folgen die Details für den Wert, den Sie erstellen müssen:

  • Wertname: APTCA_FLAG

  • Werttyp: REG_DWORD

  • Wertdaten: 1 (deaktivieren); 0 (aktivieren)

Herausgeber einer Assembly, die auf diese Weise für teilweise vertrauenswürdige Clientanwendungen deaktiviert werden muss, können einen Patch schreiben, um einen Registrierungsschlüssel und Werteinträge für die Assembly zu erstellen.

Tipp

Kern-.NET Framework-Assemblys sind von dieser Art der Deaktivierung nicht betroffen, da sie für die Ausführung von verwalteten Anwendungen erforderlich sind. Die Unterstützung zur Deaktivierung von APTCA-Assemblys wird hauptsächlich für Drittanbieter und andere Anwendungen als .NET Framework bereitgestellt.

Sandbox für externe Loose XAML

Bei Loose XAML-Dateien handelt es sich um Markup-XAML-Dateien, die nicht von einem Paket-URI identifiziert werden können (siehe Paket-URIs in Windows Presentation Foundation). Dies bedeutet, dass sie keine Ressourcendateien, Inhaltsdateien oder Dateien der Ursprungssite sind (siehe Windows Presentation Foundation-Anwendungsressource, Inhalts- und Datendateien).

Wenn von Internet Explorer direkt zu Loose XAML-Dateien navigiert wird, gilt die Sicherheitssandbox des Berechtigungssatzes der Standardsicherheitszone.

Das Sicherheitsverhalten ändert sich jedoch, wenn in einer eigenständigen Anwendung entweder von einem NavigationWindow oder einem Frame zu Loose XAML-Dateien navigiert wird.

In beiden Fällen erbt die Loose XAML-Datei, zu der navigiert wird, die Berechtigung ihrer Hostanwendung. Dieses Verhalten kann jedoch aus Sicherheitsgründen auch unerwünscht sein, besonders wenn eine Loose XAML-Datei von einer Entität erzeugt wurde, die entweder nicht vertrauenswürdig oder unbekannt ist. Dieser Inhaltstyp wird als externer Inhalt bezeichnet. Sowohl Frame als auch NavigationWindow kann so konfiguriert werden, dass der Inhalt, zu dem navigiert wird, isoliert wird. Die Isolation wird durch Festlegen der SandboxExternalContent-Eigenschaft auf true erzielt, wie in den folgenden Beispielen für Frame und NavigationWindow gezeigt:

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

Mit dieser Einstellung wird der externe Inhalt in einen anderen Prozess als den Prozess geladen, der die Anwendung hostet. Dieser Prozess ist auf den Berechtigungssatz der Standardinternetzone beschränkt und isoliert ihn effizient von der Hostanwendung und dem Clientcomputer.

Bewährte Methoden für die Entwicklung sicherer WPF-Anwendungen

Bei der Erstellung von sicheren WPF-Anwendungen müssen bewährte Methoden für Folgendes angewendet werden:

Siehe auch

Konzepte

Windows Presentation Foundation - Sicherheit bei teilweiser Vertrauenswürdigkeit

Windows Presentation Foundation-Sicherheitsstrategie - Plattformsicherheit

Windows Presentation Foundation-Sicherheitsstrategie - Sicherheitsentwicklung

Übersicht über die ClickOnce-Bereitstellung

Übersicht über XAML

Weitere Ressourcen

Patterns and Practices Security Guidance for Applications

Codezugriffssicherheit