Sicherheit (WPF)

 

Veröffentlicht: Juni 2016

Beim Entwickeln eigenständiger und im Browser gehosteter Windows Presentation Foundation (WPF)-Anwendungen müssen Sie das Sicherheitsmodell beachten. Eigenständige WPF-Anwendungen werden mit uneingeschränkten Berechtigungen (CAS FullTrust-Berechtigungssatz) ausgeführt. Dabei ist es unerheblich, ob sie mit Windows Installer (.msi), Xcopy oder ClickOnce bereitgestellt wurden. Die Bereitstellung teilweise vertrauenswürdiger, eigenständiger WPF-Anwendungen mit ClickOnce wird nicht unterstützt. Eine voll vertrauenswürdige Hostanwendung kann jedoch mithilfe des .NET Framework-Add-In-Modells eine teilweise vertrauenswürdige AppDomain erstellen. Weitere Informationen finden Sie unter Übersicht über WPF-Add-Ins.

Im Browser gehostete WPF-Anwendungen werden von Entity with relative path '../Token/TLA%23tla_iegeneric_md.md' can not be found, for source topic '{"project_id":"3fedad16-eaf1-41a6-8f96-0c1949c68f32","entity_id":"ee1baea0-3611-4e36-9ad6-fcd5205376fb","entity_type":"Article","locale":"de-DE"}'. oder Firefox gehostet. Es handelt sich dabei entweder um XAML-Browseranwendungen (XAML browser applications; XBAPs)- oder um Loose Extensible Application Markup Language (XAML)-Dokumente. Weitere Informationen finden Sie unter Übersicht über WPF-XAML-Browseranwendungen.

Im Browser gehostete WPF-Anwendungen werden standardmäßig in einem teilweise vertrauenswürdigen Sicherheitsbereich (Sandkasten) ausgeführt, der auf den Standardberechtigungssatz für die CAS Internetzone beschränkt ist. Auf diese Weise werden im Browser gehostete WPF-Anwendungen auf dieselbe Weise vom Clientcomputer isoliert wie typische Webanwendungen. Eine XBAP kann abhängig von der Sicherheitszone der Bereitstellung-URL und der Sicherheitskonfiguration des Clients Berechtigungen bis zur vollen Vertrauenswürdigkeit ausweiten. Weitere Informationen finden Sie unter WPF-Sicherheit mit teilweiser Vertrauenswürdigkeit.

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

Dieses Thema enthält folgende Abschnitte:

Für XBAPs unterscheidet WPF zwei Navigationstypen: Anwendungsnavigation und Browsernavigation.

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 die Inhalts- und Speicherort-URL des Browsers selbst ändert. Die Beziehung zwischen Anwendungsnavigation (in der Regel XAML) und Browsernavigation (in der Regel HTML) wird in der folgenden Abbildung dargestellt:

Navigationsdiagramm

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

Sicherheit der Anwendungsnavigation

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

InhaltstypBeschreibungBeispiel für URI
RessourceDateien, die einem Projekt mit einem Resource-Buildtyp hinzugefügt werden.pack://application:,,,/MyResourceFile.xaml
InhaltDateien, die einem Projekt mit einem Content-Buildtyp hinzugefügt werden.pack://application:,,,/MyContentFile.xaml
UrsprungssiteDateien, die einem Projekt mit einem None-Buildtyp hinzugefügt werden.pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
AnwendungscodeXAML-Ressourcen mit kompiliertem Code-Behind.

- oder -

XAML-Dateien, die einem Projekt mit einem Page-Buildtyp hinzugefügt werden.
pack://application:,,,/MyResourceFile .xaml
System_CAPS_ICON_note.jpg Hinweis

Weitere Informationen zu Anwendungsdatendateien und Paket-Entity with relative path '../Token/TLA2%23tla_uri%23plural_md.md' can not be found, for source topic '{"project_id":"3fedad16-eaf1-41a6-8f96-0c1949c68f32","entity_id":"ee1baea0-3611-4e36-9ad6-fcd5205376fb","entity_type":"Article","locale":"de-DE"}'. finden Sie unter WPF-Anwendungsressource, Inhalts- und Datendateien.

Zu Dateien dieser Inhaltstypen kann vom Benutzer oder programmgesteuert navigiert werden:

  • Benutzernavigation. Der Benutzer navigiert, indem er auf ein Hyperlink-Element klickt.

  • Programmgesteuerte Navigation. Die Anwendung navigiert, ohne den Benutzer einzubinden, z. B. durch Festlegen der NavigationWindow.Source-Eigenschaft.

Sicherheit der Browsernavigation

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

  • Benutzernavigation. Der Benutzer navigiert, indem er auf ein Hyperlink-Element klickt, das sich innerhalb des Haupt-NavigationWindow befindet, nicht in einem geschachtelten Frame.

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

Die Sicherheitseinstellungen auf dem Computer bestimmen, welcher Zugriff jeder Webbrowsersoftware gewährt wird. Webbrowsersoftware umfasst Anwendungen oder Komponenten, die WinINet- oder UrlMon-APIs verwenden, einschließlich Internet Explorer und PresentationHost.exe.

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

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 Eingeschränkte Sites konfiguriert. Die folgenden Schritte beschreiben, wie die Sicherheitseinstellungen konfiguriert werden:

  1. Öffnen Sie die Systemsteuerung.

  2. Klicken Sie auf Netzwerk und Internet und dann auf Internetoptionen.

    Das Dialogfeld Internetoptionen wird angezeigt.

  3. Wählen Sie auf der Registerkarte Sicherheit die Zone aus, für die die Sicherheitseinstellungen konfiguriert werden sollen.

  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

System_CAPS_ICON_note.jpg Hinweis

Sie können auch das Dialogfeld Internetoptionen von Internet Explorer verwenden. Klicken Sie auf Extras und dann auf Internetoptionen.

Ab Windows Internet Explorer 7 sind die folgenden Sicherheitseinstellungen speziell für .NET Framework enthalten:

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

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

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

Sicherheitsbezogene WPF-Registrierungseinstellungen

Zusätzlich zu den Sicherheitseinstellungen über die Internetoptionen sind die folgenden Registrierungswerte für die selektive Blockierung sicherheitsrelevanter WPF-Funktionen verfügbar. Die Werte werden unter dem folgenden Schlüssel definiert:

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

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

WertnameWerttypWertdaten
XBAPDisallowREG_DWORD1 (nicht zulassen); 0 (zulassen)
LooseXamlDisallowREG_DWORD1 (nicht zulassen); 0 (zulassen)
WebBrowserDisallowREG_DWORD1 (nicht zulassen); 0 (zulassen)
MediaAudioDisallowREG_DWORD1 (nicht zulassen); 0 (zulassen)
MediaImageDisallowREG_DWORD1 (nicht zulassen); 0 (zulassen)
MediaVideoDisallowREG_DWORD1 (nicht zulassen); 0 (zulassen)
ScriptInteropDisallowREG_DWORD1 (nicht zulassen); 0 (zulassen)

Das WebBrowser-WPF-Steuerelement kann zum Hosten von Webinhalt verwendet werden. Das WebBrowser-WPF-Steuerelement umschließt das zugrunde liegende WebBrowser-ActiveX-Steuerelement. WPF bietet eine gewisse Unterstützung zum Sichern der Anwendung, wenn Sie mit dem WebBrowser-WPF-Steuerelement nicht vertrauenswürdigen Webinhalt hosten. Einige Sicherheitsfunktionen müssen jedoch mit dem WebBrowser-Steuerelement direkt durch die Anwendungen angewendet werden. Weitere Informationen zum WebBrowser-ActiveX-Steuerelement finden Sie unter WebBrowser Control Overviews and Tutorials.

System_CAPS_ICON_note.jpg Hinweis

Dieser Abschnitt gilt auch für das Frame-Steuerelement, da es mithilfe des WebBrowser zu HTML-Inhalt navigiert.

Wenn das WebBrowser-WPF-Steuerelement zum Hosten von nicht vertrauenswürdigem Webinhalt verwendet wird, sollte die Anwendung eine teilweise vertrauenswürdige AppDomain verwenden, um den Anwendungscode von potenziell bösartigem HTML-Skriptcode zu isolieren. Dies gilt besonders, wenn die Anwendung mit dem gehosteten Skript mit der InvokeScript-Methode und der ObjectForScripting-Eigenschaft interagiert. Weitere Informationen finden Sie unter Übersicht über WPF-Add-Ins.

Wenn die Anwendung das WebBrowser-WPF-Steuerelement verwendet, ist das Aktivieren der Internet Explorer-Funktionssteuerelemente eine weitere Möglichkeit, um die Sicherheit zu erhöhen und Angriffe zu verhindern. Funktionssteuerelemente sind Ergänzungen zu Internet Explorer, mit denen Administratoren und Entwickler Funktionen von Internet Explorer und Anwendungen konfigurieren können, die das vom WebBrowser-WPF-Steuerelement umschlossene WebBrowser-ActiveX-Steuerelement hosten. Funktionssteuerelemente können mithilfe der CoInternetSetFeatureEnabled-Funktion oder durch das Ändern von Werten in der Registrierung konfiguriert werden. Weitere Informationen zu Funktionssteuerelementen finden Sie unter Introduction to Feature Controls und Internet Feature Controls.

Wenn Sie eine eigenständige WPF-Anwendung entwickeln, die das WebBrowser-WPF-Steuerelement verwendet, aktiviert WPF automatisch die folgenden Funktionssteuerelemente für die Anwendung.

Funktionssteuerelement
FEATURE_MIME_HANDLING
FEATURE_MIME_SNIFFING
FEATURE_OBJECT_CACHING
FEATURE_SAFE_BINDTOOBJECT
FEATURE_WINDOW_RESTRICTIONS
FEATURE_ZONE_ELEVATION
FEATURE_RESTRICT_FILEDOWNLOAD
FEATURE_RESTRICT_ACTIVEXINSTALL
FEATURE_ADDON_MANAGEMENT
FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
FEATURE_SECURITYBAND
FEATURE_UNC_SAVEDFILECHECK
FEATURE_VALIDATE_NAVIGATE_URL
FEATURE_DISABLE_TELNET_PROTOCOL
FEATURE_WEBOC_POPUPMANAGEMENT
FEATURE_DISABLE_LEGACY_COMPRESSION
FEATURE_SSLUX

Da diese Funktionssteuerelemente ohne Bedingung aktiviert werden, können sie möglicherweise voll vertrauenswürdige Anwendungen beeinträchtigen. In diesem Fall kann das entsprechende Funktionssteuerelement deaktiviert werden, wenn kein Sicherheitsrisiko für die jeweilige Anwendung und den gehosteten Inhalt besteht.

Funktionssteuerelemente werden von dem Prozess angewendet, der das WebBrowser-ActiveX-Objekt instanziiert. Daher wird dringend empfohlen, beim Erstellen einer eigenständigen Anwendung, die zu nicht vertrauenswürdigem Inhalt navigieren kann, zusätzliche Funktionssteuerelemente zu aktivieren.

System_CAPS_ICON_note.jpg Hinweis

Diese Empfehlung basiert auf allgemeinen Empfehlungen für MSHTML- und SHDOCVW-Hostsicherheit. Weitere Informationen finden Sie unter The MSHTML Host Security FAQ: Part I of II und The MSHTML Host Security FAQ: Part II of II.

Es wird empfohlen, für die ausführbare Datei die folgenden Funktionssteuerelemente durch Festlegen des Registrierungswerts auf 1 zu aktivieren.

Funktionssteuerelement
FEATURE_ACTIVEX_REPURPOSEDETECTION
FEATURE_BLOCK_LMZ_IMG
FEATURE_BLOCK_LMZ_OBJECT
FEATURE_BLOCK_LMZ_SCRIPT
FEATURE_RESTRICT_RES_TO_LMZ
FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7
FEATURE_SHOW_APP_PROTOCOL_WARN_DIALOG
FEATURE_LOCALMACHINE_LOCKDOWN
FEATURE_FORCE_ADDR_AND_STATUS
FEATURE_RESTRICTED_ZONE_WHEN_FILE_NOT_FOUND

Es wird empfohlen, für die ausführbare Datei das folgende Funktionssteuerelement durch Festlegen des Registrierungswerts auf 0 zu deaktivieren.

Funktionssteuerelement
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

Wenn Sie eine teilweise vertrauenswürdige XAML-Browseranwendung (XBAP) ausführen, die ein WebBrowser-WPF-Steuerelement in Entity with relative path '../Token/TLA%23tla_iegeneric_md.md' can not be found, for source topic '{"project_id":"3fedad16-eaf1-41a6-8f96-0c1949c68f32","entity_id":"ee1baea0-3611-4e36-9ad6-fcd5205376fb","entity_type":"Article","locale":"de-DE"}'. enthält, hostet WPF das WebBrowser-ActiveX-Steuerelement im Adressbereich des Internet Explorer-Prozesses. Da das WebBrowser-ActiveX-Steuerelement im Internet Explorer-Prozess gehostet wird, sind alle Funktionssteuerelemente für Internet Explorer auch für das WebBrowser-ActiveX-Steuerelement aktiviert.

In Internet Explorer ausgeführte XBAPs erhalten im Vergleich zu normalen eigenständigen Anwendungen ebenfalls eine zusätzliche Sicherheitsebene. Diese zusätzliche Sicherheit ergibt sich daraus, dass Internet Explorer und daher das WebBrowser-ActiveX-Steuerelement unter Windows Vista und Windows 7 standardmäßig im geschützten Modus ausgeführt werden. Weitere Informationen zum geschützten Modus finden Sie unter Understanding and Working in Protected Mode Internet Explorer.

System_CAPS_ICON_note.jpg Hinweis

Wenn Sie versuchen, in der Internetzone eine XBAP auszuführen, die ein WebBrowser-WPF-Steuerelement in Firefox enthält, wird eine SecurityException ausgelöst. Dies geschieht aufgrund der WPF-Sicherheitsrichtlinie.

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 ein Sicherheitsupdate erzeugen, um das Problem in vorhandenen Installationen zu beheben und Installationen zu schützen, die nach der Entdeckung des Problems erfolgen. Das Update 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 XBAPs deaktiviert werden kann, ohne die APTCA-Assembly zu deinstallieren.

Zum Deaktivieren einer APTCA-Assembly müssen Sie einen speziellen Registrierungsschlüssel erstellen:

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

Im Folgenden wird ein Beispiel angezeigt:

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

Dieser Schlüssel erstellt einen Eintrag für die APTCA-Assembly. Sie müssen außerdem einen Wert in diesem Schlüssel erstellen, der die Assembly aktiviert oder deaktiviert. Im Folgenden sind die Details für den Wert aufgeführt:

  • Wertname: APTCA_FLAG

  • Werttyp: REG_DWORD

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

Muss eine Assembly für teilweise vertrauenswürdige Clientanwendungen deaktiviert werden, können Sie ein Update zum Erstellen des Registrierungsschlüssels und des Werts schreiben.

System_CAPS_ICON_note.jpg Hinweis

.NET Framework-Kernassemblys 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 Anwendungen von Drittanbietern bereitgestellt.

Loose XAML-Dateien sind Markup-XAML-Dateien, die nicht von CodeBehind-, Ereignishandler- oder anwendungsspezifischen Assemblys abhängen. Wenn zu Loose XAML-Dateien direkt vom Browser navigiert wird, werden sie basierend auf dem Standardberechtigungssatz für die Internetzone in einem Sicherheitssandkasten geladen.

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="http://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 Standardberechtigungssatz für die Internetzone beschränkt und isoliert ihn effizient von der Hostanwendung und dem Clientcomputer.

System_CAPS_ICON_note.jpg Hinweis

Obwohl die Navigation zu Loose XAML-Dateien von einem NavigationWindow oder Frame in einer eigenständigen Anwendung auf Grundlage der WPF-Browserhostinginfrastruktur implementiert wird und den PresentationHost-Prozess beinhaltet, ist die Sicherheitsebene etwas niedriger, als wenn der Inhalt unter Windows Vista und Windows 7 direkt in Internet Explorer geladen wird (ebenfalls über PresentationHost). Dies liegt daran, dass eine eigenständige WPF-Anwendung, die einen Webbrowser verwendet, die zusätzliche Sicherheitsfunktion für den geschützten Modus von Internet Explorer nicht bereitstellt.

Nachfolgend sind einige zusätzliche Ressourcen zum Entwickeln von WPF-Anwendungen aufgeführt, die die Sicherheit erhöhen:

BereichRessource
Verwalteter CodePatterns and Practices-Sicherheitsleitfaden für Anwendungen (möglicherweise in englischer Sprache)
CASCodezugriffssicherheit
ClickOnceClickOnce-Sicherheit und Bereitstellung
WPFWPF-Sicherheit mit teilweiser Vertrauenswürdigkeit

WPF-Sicherheit mit teilweiser Vertrauenswürdigkeit
WPF-Sicherheitsstrategie – Plattformsicherheit
WPF-Sicherheitsstrategie – Sicherheitsentwicklung
Patterns and Practices-Sicherheitsleitfaden für Anwendungen
Codezugriffssicherheit
ClickOnce-Sicherheit und Bereitstellung
Übersicht über XAML (WPF)

Anzeigen: