Sicherheit (WPF)
Beim Entwickeln von eigenständigen und browsergehosteten Anwendungen von Windows Presentation Foundation (WPF) müssen Sie das Sicherheitsmodell berücksichtigen. Eigenständige WPF-Anwendungen werden mit uneingeschränkten Berechtigungen ausgeführt ( CASFullTrust Berechtigungssatz), 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 Internet Explorer oder Firefox gehostet und können entweder XAML-Browseranwendungen (XBAPs) oder lose Extensible Application Markup Language (XAML)-Dokumente sein. Weitere Informationen hierzu finden Sie unter WPF XAML Browser Applications Overview.
Warnung
XBAPs erfordern, dass ältere Browser funktionieren, z. B. Internet Explorer und alte Versionen von Firefox. Diese älteren Browser werden in der Regel unter Windows 10 und Windows 11 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. Weitere Informationen finden Sie unter Häufig gestellte Fragen zu von browsergehosteten WPF-Anwendungen (XBAP).
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 browsergehostete Anwendungen von Windows Presentation Foundation (WPF) erläutert.
Dieses Thema enthält die folgenden Abschnitte:
Deaktivieren von APTCA-Assemblys für teilweise vertrauenswürdige Clientanwendungen
Ressourcen für die Entwicklung von WPF-Anwendungen, die die Sicherheit fördern
Sichere Navigation
Für XBAPs unterscheidet WPF zwei Arten von Navigation: Anwendung und Browser.
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) wird in der folgenden Abbildung gezeigt:
Der Inhaltstyp, der für eine XBAP-Navigation als sicher angesehen wird, hängt in erster Linie davon ab, ob Anwendungsnavigation oder Browsernavigation verwendet wird.
Anwendungsnavigationssicherheit
Die Anwendungsnavigation gilt als sicher, wenn sie mit einem Pack-URI identifiziert werden kann, der vier Inhaltstypen unterstützt:
Inhaltstyp | Beschreibung | URI-Beispiel |
---|---|---|
Ressource | 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 |
Herkunftswebsite | 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 Build-Typ von Pagehinzugefügt werden. |
pack://application:,,,/MyResourceFile .xaml |
Anmerkung
Weitere Informationen zu Anwendungsdatendateien und Pack-URIs finden Sie unter WPF-Anwendungsressourcen, Inhalte und Datendateien.
Dateien dieser Inhaltstypen können vom Benutzer oder programmgesteuert aufgerufen werden.
Benutzernavigation. Die Benutzer*innen navigieren durch Klicken auf ein Hyperlink-Element.
Programmgesteuerte Navigation Die Anwendung navigiert, ohne den Benutzer einzubeziehen, z. B. durch Festlegen der NavigationWindow.Source-Eigenschaft.
Browsernavigationssicherheit
Die Browsernavigation gilt nur unter den folgenden Bedingungen als sicher:
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, zu dem navigiert wird, befindet sich im Internet oder im lokalen Intranet.
Protokoll. Das verwendete Protokoll ist entweder http, https, Datei, 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 Webbrowser
Die Sicherheitseinstellungen auf Ihrem Computer bestimmen den Zugriff, der jeder Webbrowser-Software gewährt wird. Webbrowsen-Software enthält jede Anwendung oder Komponente, die die WinINet- oder UrlMon--APIs verwendet, einschließlich Internet Explorer und PresentationHost.exe.
Internet Explorer bietet einen Mechanismus, mit dem Sie die Funktionalität konfigurieren können, die von oder aus Internet Explorer ausgeführt werden darf, einschließlich der folgenden:
.NET Framework-kompatible 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 Sie Ihre Sicherheitseinstellungen konfigurieren:
Öffnen Sie die Systemsteuerung.
Klicken Sie auf Netzwerk und Internet und dann auf Internetoptionen.
Das Dialogfeld "Internetoptionen" wird angezeigt.
Wählen Sie auf der Registerkarte Sicherheit die Zone aus, für die die Sicherheitseinstellungen konfiguriert werden sollen.
Klicken Sie auf die Schaltfläche Stufe anpassen.
Das Dialogfeld Sicherheitseinstellungen wird angezeigt, und Sie können die Sicherheitseinstellungen für die ausgewählte Zone konfigurieren.
Anmerkung
Sie können auch über 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 ausführen kann. (Optionen „Aktivieren“, „Deaktivieren“ und „Bestätigen“.)
Standardmäßig sind diese Einstellungen für die Internet-, Lokales Intranet-und Vertrauenswürdige Websites Zonen aktiviert und für die Zone Eingeschränkte Websites deaktiviert.
Sicherheitsbezogene WPF-Registrierungseinstellungen
Zusätzlich zu den Sicherheitseinstellungen, die über die Internetoptionen verfügbar sind, stehen die folgenden Registrierungswerte zur selektiven Sperrung einer Reihe von sicherheitsrelevanten WPF-Features zur Verfügung. 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 aufgeführt, die festgelegt werden können.
Wertname | Werttyp | Wertdaten |
---|---|---|
XBAPDisallow | REG_DWORD | 1 bedeutet verbieten; 0 bedeutet erlauben. |
LooseXamlDisallow | REG_DWORD | 1 = nicht zulassen; 0 = zulassen |
WebBrowserDisallow | REG_DWORD | 1 = nicht zulassen; 0 = zulassen |
MediaAudioDisallow | REG_DWORD | 1, um zu verbieten; 0, um zuzulassen. |
MediaImageDisallow | REG_DWORD | 1 für verbieten; 0 für erlauben. |
MediaVideoDisallow | REG_DWORD | 1 um zu verbieten; 0 um zuzulassen. |
ScriptInteropDisallow | REG_DWORD | 1 steht für Verbieten; 0 für Zulassen. |
WebBrowser-Steuerelement und Funktionssteuerelemente
Das WPF-WebBrowser-Steuerelement kann zum Hosten von Webinhalten verwendet werden. Das WebBrowser-WPF-Steuerelement umschließt das zugrunde liegende WebBrowser-ActiveX-Steuerelement. WPF bietet unterstützung für die Sicherung Ihrer Anwendung, wenn Sie das WPF-WebBrowser-Steuerelement verwenden, um nicht vertrauenswürdige Webinhalte zu hosten. 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.
Anmerkung
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 gilt insbesondere, wenn Ihre Anwendung mit dem gehosteten Skript interagiert, indem Sie die InvokeScript-Methode und die eigenschaft ObjectForScripting verwenden. Weitere Informationen finden Sie unter Übersicht über WPF-Add-Ins.
Wenn Ihre Anwendung das WPF-WebBrowser-Steuerelement verwendet, besteht eine weitere Möglichkeit, um die Sicherheit zu erhöhen und Angriffe zu verringern, darin, Internet Explorer-Featuresteuerelemente zu aktivieren. 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 Funktionssteuerungen finden Sie unter Einführung in Funktionssteuerungen und Internet-Funktionssteuerungen.
Wenn Sie eine eigenständige WPF-Anwendung entwickeln, die das WPF-WebBrowser-Steuerelement verwendet, aktiviert WPF automatisch die folgenden Featuresteuerelemente für Ihre 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. Wenn Sie daher eine eigenständige Anwendung erstellen, die zu nicht vertrauenswürdigen Inhalten navigieren kann, sollten Sie die Aktivierung zusätzlicher Featuresteuerelemente ernsthaft in Betracht ziehen.
Anmerkung
Diese Empfehlung basiert auf allgemeinen Empfehlungen für MSHTML- und SHDOCVW-Hostsicherheit. Weitere Informationen finden Sie unter Häufig gestellte Fragen zur MSHTML-Hostsicherheit: Teil I von II und 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 Featuresteuerelemente für Internet Explorer auch für das WebBrowser ActiveX-Steuerelement aktiviert.
XBAPs, die in Internet Explorer ausgeführt werden, erhalten auch eine zusätzliche Sicherheitsstufe im Vergleich zu normalen eigenständigen Anwendungen. Diese zusätzliche Sicherheit liegt daran, dass Internet Explorer und daher das WebBrowser ActiveX-Steuerelement standardmäßig im geschützten Modus unter Windows Vista und Windows 7 ausgeführt werden. Weitere Informationen zum geschützten Modus finden Sie unter Understanding and Working in Protected Mode Internet Explorer.
Anmerkung
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 liegt an der WPF-Sicherheitsrichtlinie.
Deaktivieren von APTCA-Assemblys für teilweise vertrauenswürdige Clientanwendungen
Wenn verwaltete Assemblys im globalen Assemblycache (GAC) installiert werden, werden sie vollständig vertrauenswürdig, da der Benutzer explizit die Berechtigung zum Installieren der Assemblys erteilen muss. 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.
Es ist jedoch möglich, dass eine APTCA-Assembly nach der Installation in das GAC einen Sicherheitsfehler aufweist. Sobald ein Sicherheitsfehler erkannt wurde, können Assembly-Verleger ein Sicherheitsupdate erstellen, um das Problem bei vorhandenen Installationen zu beheben und gegen Installationen zu schützen, die nach Entdeckung des Problems auftreten können. Eine Option für das Update besteht darin, die Assembly zu deinstallieren. Dies kann jedoch andere voll vertrauenswürdige Clientanwendungen unterbrechen, die die 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>
Im Folgenden sehen Sie 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 auch einen Wert in diesem Schlüssel erstellen, der die Assembly aktiviert oder deaktiviert. Im Folgenden sind die Details des Werts 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 schreiben, in dem der Registrierungsschlüssel und dessen Wert aktualisiert werden.
Anmerkung
Kernassemblys von .NET Framework sind nicht davon betroffen, dass sie auf diese Weise deaktiviert werden, da sie für die Ausführung verwalteter 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 nicht erwünscht sein, insbesondere, wenn eine lose XAML-Datei von einer Entität erstellt 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 werden externe Inhalte in einen Prozess geladen, der von dem Prozess getrennt ist, der die Anwendung hosten soll. Dieser Prozess ist auf den Standardberechtigungssatz der Internetzone beschränkt und damit effektiv von der Hostanwendung und dem Clientcomputer isoliert.
Anmerkung
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, nicht das zusätzliche Sicherheitsfeature für den geschützten Modus von Internet Explorer bereitstellt.
Ressourcen für die Entwicklung von WPF-Anwendungen, die Sicherheit fördern
Im Folgenden finden Sie einige zusätzliche Ressourcen zum Entwickeln von WPF-Anwendungen, die die Sicherheit fördern:
Fläche | Ressource |
---|---|
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
.NET Desktop feedback