Sicherheit (WPF)

Beim Entwickeln eigenständiger und im Browser gehosteter WPF-Anwendungen (Windows Presentation Foundation) müssen Sie das Sicherheitsmodell beachten. Eigenständige WPF-Anwendungen werden mit uneingeschränkten Berechtigungen (CAS-Berechtigungssatz FullTrust) ausgeführt, unabhängig davon, ob sie mit Windows Installer (MSI), XCopy oder ClickOnce bereitgestellt werden. 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 Windows Internet Explorer oder Firefox gehostet und können entweder XAML-Browseranwendungen (XBAPs) oder Loose XAML-Dokumente (Extensible Application Markup Language) sein. Weitere Informationen finden Sie unter Übersicht über WPF-XAML-Browseranwendungen.

Warnung

XBAPs erfordern Legacybrowser, z. B. Internet Explorer und Firefox. Diese älteren Browserversionen werden unter Windows 10 und Windows 11 normalerweise nicht unterstützt. Moderne Browser unterstützen die für XBAP-Apps erforderliche Technologie aufgrund von Sicherheitsrisiken nicht mehr. Plug-Ins, die XBAPs aktivieren, werden nicht mehr unterstützt.

Im Browser gehostete WPF-Anwendungen werden standardmäßig in einem teilweise vertrauenswürdigen Sicherheitsbereich (Sandbox) ausgeführt, der auf den Standardberechtigungssatz für die CAS-Zone Internet beschränkt ist. Dadurch werden in einem Browser ausgeführte WPF-Anwendungen effektiv vom Clientcomputer isoliert, wie Sie es auch von typischen Webanwendungen erwarten. Eine XBAP kann, abhängig von der Sicherheitszone der Bereitstellungs-URL und der Sicherheitskonfiguration des Clients, Berechtigungen bis zur vollen Vertrauenswürdigkeit erhöhen. 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 WPF-Anwendungen (Windows Presentation Foundation) erläutert.

Dieses Thema enthält folgende Abschnitte:

Sichere Navigation

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

Relationship between application navigation and browser navigation.

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

Sicherheit von Anwendungsnavigation

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

Inhaltstyp Beschreibung URI-Beispiel
Resource Dateien, die einem Projekt mit einem Resource-Buildtyp hinzugefügt werden pack://application:,,,/MyResourceFile.xaml
Inhalt Dateien, die einem Projekt mit einem Content-Buildtyp hinzugefügt werden pack://application:,,,/MyContentFile.xaml
Ursprungswebsite Dateien, die einem Projekt mit einem None-Buildtyp hinzugefügt werden pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
Anwendungscode XAML-Ressourcen mit kompiliertem Code-Behind

Oder

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

Hinweis

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

Ein Navigieren zu Dateien dieser Inhaltstypen kann sowohl durch einen Benutzer als auch programmgesteuert erfolgen:

  • Benutzernavigation. Die Benutzer*innen navigieren durch Klicken auf ein Hyperlink-Element.

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

Sicherheit von Browsernavigation

Browsernavigation wird nur unter den folgenden Bedingungen als sicher betrachtet:

  • Benutzernavigation. Die Benutzer*innen navigieren durch Klicken auf ein Hyperlink-Element, das sich im Haupt-NavigationWindow und nicht in einem geschachtelten Frame befindet.

  • Zone: Der Inhalt, in dem navigiert wird, befindet sich im Internet oder im lokalen Intranet.

  • Protokoll. Es wird eines der folgenden Protokolle verwendet: http, https, file oder mailto.

Wenn eine XBAP versucht, in einer Weise zu Inhalten zu navigieren, die nicht diesen Bedingungen entspricht, wird eine Sicherheitsausnahme (SecurityException) ausgelöst.

Sicherheitseinstellungen für webbrowsende Software

Die Sicherheitseinstellungen auf dem Computer bestimmen, welcher Zugriff jeder webbrowsenden Software gewährt wird. Zu webbrowsender Software gehören alle Anwendungen oder Komponenten, die die WinINet-API oder die UrlMon-API 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 aus Internet Explorer zulässig ist. Dazu zählt Folgendes:

  • Von .NET Framework abhängige Komponenten

  • ActiveX-Steuerelemente und Plug-Ins

  • Downloads

  • Skripterstellung

  • Benutzerauthentifizierung

Die Sammlung der Funktionen, die auf diese Weise geschützt 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, und Sie können die Sicherheitseinstellungen für die ausgewählte Zone konfigurieren.

    Screenshot that shows the Security Settings dialog box.

Hinweis

Sie können auch aus Internet Explorer zum Dialogfeld „Internetoptionen“ gelangen. 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 „Bestätigen“.)

  • XAML-Browseranwendungen. Steuert, ob Internet Explorer zu XBAPs navigieren und diese ausführen kann (Optionen „Aktivieren“, „Deaktivieren“ und „Bestätigen“.)

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.

Zusätzlich zu den Sicherheitseinstellungen, die über die Internetoptionen verfügbar sind, sind die folgenden Registrierungswerte für die selektive Blockierung einiger 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.

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
MediaAudioDisallow REG_DWORD 1 = nicht zulassen; 0 = zulassen
MediaImageDisallow REG_DWORD 1 = nicht zulassen; 0 = zulassen
MediaVideoDisallow REG_DWORD 1 = nicht zulassen; 0 = zulassen
ScriptInteropDisallow REG_DWORD 1 = nicht zulassen; 0 = zulassen

WebBrowser-Steuerelement und Funktionssteuerelemente

Das WebBrowser-WPF-Steuerelement kann zum Hosten von Webinhalten verwendet werden. Das WebBrowser-WPF-Steuerelement umschließt das zugrunde liegende WebBrowser-ActiveX-Steuerelement. WPF bietet eine gewisse Unterstützung zum Schützen der Anwendung, wenn Sie mit dem WebBrowser-WPF-Steuerelement Webinhalt hosten, der nicht vertrauenswürdig ist. Einige Sicherheitsfunktionen müssen jedoch direkt durch die Anwendungen mit dem WebBrowser-Steuerelement angewandt werden. Weitere Informationen zum WebBrowser-ActiveX-Steuerelement finden Sie unter WebBrowser-Steuerelement: Übersicht und Tutorials.

Hinweis

Dieser Abschnitt gilt auch für das Frame-Steuerelement, da es über 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 trifft insbesondere zu, wenn die Anwendung über die InvokeScript-Methode und die ObjectForScripting-Eigenschaft mit dem gehosteten Skript interagiert. Weitere Informationen finden Sie unter Übersicht über WPF-Add-Ins.

Wenn die Anwendung das WebBrowser-WPF-Steuerelement verwendet, ist stellt Aktivieren der Internet Explorer-Funktionssteuerelemente eine weitere Möglichkeit dar, die Sicherheit zu erhöhen und Angriffe zu verhindern. Funktionssteuerelemente sind Ergänzungen zu Internet Explorer, mit denen Administrator*innen und Entwickler*innen Funktionen von Internet Explorer und Anwendungen konfigurieren können, die das WebBrowser-ActiveX-Steuerelement hosten, das vom WebBrowser-WPF-Steuerelement umschlossen ist. Funktionssteuerelemente können mithilfe der CoInternetSetFeatureEnabled-Funktion oder durch Ändern von Werten in der Registrierung konfiguriert werden. Weitere Informationen zu Funktionssteuerelementen finden Sie unter Einführung in Funktionssteuerelemente und Internet-Funktionssteuerelemente.

Wenn Sie eine eigenständige WPF-Anwendung entwickeln, in der das WebBrowser-WPF-Steuerelement verwendet wird, 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 bedingungslos 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 angewandt, der das WebBrowser-ActiveX-Objekt instanziiert. Daher wird unbedingt empfohlen, beim Erstellen einer eigenständigen Anwendung, die zu nicht vertrauenswürdigem Inhalt navigieren kann, zusätzliche Funktionssteuerelemente zu aktivieren.

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 (Häufig gestellte Fragen zur MSHTML-Hostsicherheit: Teil I von II) und The MSHTML Host Security FAQ: Part II of II (Häufig gestellte Fragen zur MSHTML-Hostsicherheit: Teil II von II).

Für eine ausführbare Datei sollten die folgenden Funktionssteuerelemente aktiviert werden, indem der Registrierungswert auf 1 festgelegt wird.

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

Für eine ausführbare Datei sollte das folgenden Funktionssteuerelement deaktiviert werden, indem der Registrierungswert auf 0 festgelegt wird.

Funktionssteuerelement
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

Wenn Sie eine teilweise vertrauenswürdige XBAP (XAML-Browseranwendung) ausführen, die ein WebBrowser-WPF-Steuerelement in Windows Internet Explorer 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.

XBAPs, die in Internet Explorer ausgeführt werden, haben im Vergleich zu normalen eigenständigen Anwendungen ebenfalls ein höheres Maß an Sicherheit. Diese zusätzliche Sicherheit ergibt sich daraus, dass Internet Explorer, und somit auch das WebBrowser-ActiveX-Steuerelement, unter Windows Vista und Windows 7 standardmäßig im geschützten Modus ausgeführt wird. Weitere Informationen zum geschützten Modus finden Sie unter Grundlegendes und Arbeiten mit Internet Explorer im geschützten Modus.

Hinweis

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

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

Wenn verwaltete Assemblys im globalen Assemblycache (GAC) installiert werden, gelten sie als voll vertrauenswürdig, da die Benutzer*innen für ihre Installation eine explizite Berechtigung bereitstellen müssen. Da sie voll vertrauenswürdig sind, können sie nur von voll vertrauenswürdigen verwalteten Clientanwendungen verwendet werden. Damit sie von teilweise vertrauenswürdigen Anwendungen verwendet werden können, müssen sie mit AllowPartiallyTrustedCallersAttribute (APTCA) markiert werden. Mit diesem Attribut sollten nur Assemblys markiert werden, für die bei Tests nachgewiesen wurde, dass sie bei Ausführung in teilweiser Vertrauenswürdigkeit sicher sind.

Für eine APTCA-Assembly kann sich jedoch, nachdem sie im globalen Assemblycache installiert wurde, ein Sicherheitsrisiko zeigen. Nachdem ein Sicherheitsrisiko entdeckt wurde, können Assemblyherausgeber ein Sicherheitsupdate erstellen, um das Problem in vorhandenen Installationen zu beheben und Installationen zu schützen, die nach der Entdeckung des Problems erfolgen. Eine Option für ein solches Update besteht darin, die Assembly zu deinstallieren, was jedoch zum Versagen 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.

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

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

Es folgt ein Beispiel:

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. Die Details des Werts sehen wie folgt aus:

  • 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 schreiben, in dem der Registrierungsschlüssel und dessen Wert aktualisiert werden.

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 zielt hauptsächlich auf Anwendungen von Drittanbietern ab.

Sandkastenverhalten für Loose XAML-Dateien

Loose XAML-Dateien sind Markup-XAML-Dateien, die von keiner CodeBehind-, Ereignishandler- oder anwendungsspezifischen Assembly abhängen. Wird direkt aus dem Browser zu Loose XAML-Dateien navigiert, werden diese entsprechend dem Standardberechtigungssatz für die Internetzone in eine Sicherheitssandbox geladen.

Das Sicherheitsverhalten ist jedoch anders, wenn aus einem NavigationWindow oder Frame in einer eigenständigen Anwendung zu Loose XAML-Dateien navigiert wird.

In beiden Fällen erbt die Loose XAML-Datei, zu der navigiert wird, die Berechtigungen ihrer Hostanwendung. Dieses Verhalten kann jedoch aus Sicherheitsgründen 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, und sowohl Frame als auch NavigationWindow können so konfiguriert werden, dass der Inhalt isoliert wird, wenn zu ihm navigiert wird. Die Isolation wird durch Festlegen der SandboxExternalContent-Eigenschaft auf TRUE erreicht, 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 Prozess geladen, der von dem Prozess getrennt ist, der die Anwendung hostet. Dieser Prozess ist auf den Standardberechtigungssatz für die Internetzone beschränkt, wodurch er effizient von der Hostanwendung und dem Clientcomputer isoliert ist.

Hinweis

Obwohl die Navigation zu Loose XAML-Dateien aus einem NavigationWindow oder Frame in einer eigenständigen Anwendung auf Grundlage der WPF-Browserhostinginfrastruktur implementiert wird und den PresentationHost-Prozess beinhaltet, ist die Sicherheitsstufe 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 „Geschützter Modus“-Sicherheitsfunktion von Internet Explorer nicht bereitstellt.

Ressourcen zum Entwickeln von WPF-Anwendungen, die die Sicherheit erhöhen

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

Bereich Resource
Verwalteter Code Leitfäden zur Sicherheit von Anwendungen mit Mustern und Vorgehensweisen
CAS Codezugriffssicherheit
ClickOnce ClickOnce-Sicherheit und Bereitstellung
WPF WPF-Sicherheit mit teilweiser Vertrauenswürdigkeit

Siehe auch