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:
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:
Öffnen Sie Internet Explorer.
Klicken Sie im Menü Extras auf Optionen | Sicherheit.
Wählen Sie die Zone aus, für die Sie die Sicherheitseinstellungen konfigurieren möchten.
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.
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:
Weitere Informationen zum verwalteten Code finden Sie unter Patterns and Practices Security Guidance for Applications.
CAS: siehe Codezugriffssicherheit.
ClickOnce: siehe Übersicht über die ClickOnce-Bereitstellung.
WPF: siehe Windows Presentation Foundation - Sicherheit bei teilweiser Vertrauenswürdigkeit.
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