Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Im Allgemeinen sollten Internetanwendungen daran gehindert werden, direkten Zugriff auf kritische Systemressourcen zu haben, um böswillige Schäden zu verhindern. Standardmäßig können HTML- und clientseitige Skriptsprachen nicht auf wichtige Systemressourcen zugreifen. Da vom Browser gehostete Windows Presentation Foundation (WPF)-Anwendungen über den Browser gestartet werden können, sollten sie einer ähnlichen Gruppe von Einschränkungen entsprechen. Um diese Einschränkungen zu erzwingen, basiert WPF sowohl auf CodeZugriffssicherheit (Code Access Security, CAS) als auch clickOnce (siehe WPF-Sicherheitsstrategie – Plattformsicherheit). Standardmäßig beanspruchen browsergehostete Anwendungen den CAS-Berechtigungssatz der Internetzone, unabhängig davon, ob sie vom Internet, dem lokalen Intranet oder dem lokalen Computer gestartet werden. Anwendungen, die nicht mit dem vollständigen Satz an Berechtigungen ausgeführt werden, werden mit eingeschränktem Vertrauen ausgeführt.
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 WPF-Anwendungen, die im Browser gehostet werden (XBAP).
WPF bietet eine Vielzahl von Unterstützung, um sicherzustellen, dass so viele Funktionen wie möglich sicher in partiellem Vertrauen verwendet werden können, und bietet zusammen mit CAS zusätzliche Unterstützung für die Programmierung mit partiellem Vertrauen.
Dieses Thema enthält die folgenden Abschnitte:
Teilweise vertrauenswürdige WPF-Funktion
Warnung
Code Access Security (CAS) wird von modernem .NET nicht unterstützt, es handelt sich um ein .NET Framework-Only-Konzept. Alle CAS-bezogenen Funktionen gelten als vollständig vertrauenswürdig. Weitere Informationen finden Sie unter Unterschiede mit WPF .NET – Codezugriffssicherheit.
In der folgenden Tabelle sind die allgemeinen Features von Windows Presentation Foundation (WPF) aufgeführt, die innerhalb der Grenzwerte des Internetzonenberechtigungssatzes sicher verwendet werden können.
Tabelle 1: WPF-Eigenschaften, die bei reduziertem Vertrauen sicher sind
Funktionsbereich | Merkmal |
---|---|
Allgemein | Browserfenster Ort des Herkunftszugriffs IsolatedStorage (Grenzwert von 512 KB) UIAutomation-Anbieter Befehlend Eingabemethoden-Editoren (IMEs) Tabletstift und Tinte Simuliertes Ziehen/Ablegen mit Mauserfassungs- und Bewegungsereignissen OpenFileDialog XAML-Deserialisierung (über XamlReader.Load) |
Webintegration | Browser-Download-Dialog Top-Level User-Initiated Navigation mailto:links Uniform Resource Identifier-Parameter HTTPWebRequest In einem IFRAME gehosteter WPF-Inhalt Hosten von Same-Site HTML-Seiten mit Frame Hosten von HTML-Seiten derselben Website mithilfe von WebBrowser Webdienste (ASMX) Webdienste (mit Windows Communication Foundation) Skripterstellung Dokumentobjektmodell |
Visuelle Elemente | 2D und 3D Zeichentrickfilm Medien (Ursprungseite und Domänenübergreifend) Imageerstellung/Audio/Video |
Lesen | FlowDocuments XPS-Dokumente Eingebettete & Systemschriftarten CFF & TrueType-Schriftarten |
Bearbeiten | Rechtschreibprüfung RichTextBox Unterstützung für Klartext und Tinte in der Zwischenablage User-Initiated Einfügen Kopieren ausgewählter Inhalte |
Bedienelemente | Allgemeine Steuerelemente |
In dieser Tabelle werden die WPF-Features auf hoher Ebene behandelt. Für ausführlichere Informationen dokumentiert das Windows SDK die Berechtigungen, die für jedes Mitglied in WPF erforderlich sind. Darüber hinaus bieten die folgenden Features detailliertere Informationen zur Ausführung mit eingeschränktem Vertrauen, einschließlich besonderer Berücksichtigungen.
XAML (siehe XAML in WPF).
Popups (siehe System.Windows.Controls.Primitives.Popup).
Ziehen und Ablegen (siehe Übersicht über Ziehen und Ablegen).
Zwischenablage (siehe System.Windows.Clipboard).
Imageerstellung (siehe System.Windows.Controls.Image).
Serialisierung (siehe XamlReader.Load, XamlWriter.Save).
Dialogfeld 'Datei öffnen' (siehe Microsoft.Win32.OpenFileDialog).
In der folgenden Tabelle sind die WPF-Features aufgeführt, die nicht sicher innerhalb der Grenzwerte des Berechtigungssatzes für die Internetzone ausgeführt werden können.
Tabelle 2: WPF-Features, die in eingeschränkter Vertrauensstellung nicht sicher sind
Funktionsbereich | Merkmal |
---|---|
Allgemein | Fenster (Anwendungsdefinierte Fenster und Dialogfelder) Datei speichern Dialog Dateisystem Zugriff auf die Registrierung Ziehen und Loslassen XAML-Serialisierung (über XamlWriter.Save) UIAutomation-Clients Zugriff auf Quellfenster (HwndHost) Vollständige Sprachunterstützung Windows Forms-Interoperabilität |
Visuelle Elemente | Bitmapeffekte Bildcodierung |
Bearbeiten | Rich-Text-Format-Zwischenablage Vollständige XAML-Unterstützung |
Partielle Vertrauensprogrammierung
Für XBAP-Anwendungen hat Code, der den Standardberechtigungssatz überschreitet, je nach Sicherheitszone ein anderes Verhalten. In einigen Fällen erhält der Benutzer eine Warnung, wenn er versucht, ihn zu installieren. Der Benutzer kann die Installation fortsetzen oder abbrechen. In der folgenden Tabelle wird das Verhalten der Anwendung für jede Sicherheitszone und die Aktionen beschrieben, die sie für die Anwendung ausführen müssen, um volle Vertrauenswürdigkeit zu erhalten.
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 WPF-Anwendungen, die im Browser gehostet werden (XBAP).
Sicherheitszone | Verhalten | Volles Vertrauen gewinnen |
---|---|---|
Lokaler Computer | Automatisches Volles Vertrauen | Es ist keine Aktion erforderlich. |
Intranet und vertrauenswürdige Websites | Aufforderung zur uneingeschränkten Vertrauenswürdigkeit | Signieren Sie die XBAP mit einem Zertifikat, damit der Benutzer die Quelle in der Eingabeaufforderung sieht. |
Internet | Schlägt mit "Vertrauensstellung nicht gewährt" fehl. | Signieren Sie die XBAP mit einem Zertifikat. |
Hinweis
Das in der vorherigen Tabelle beschriebene Verhalten gilt für voll vertrauenswürdige XBAPs, die nicht dem ClickOnce Trusted Deployment-Modell folgen.
Im Allgemeinen ist Code, der die zulässigen Berechtigungen überschreitet, wahrscheinlich gängiger Code, der sowohl zwischen eigenständigen als auch von Browser gehosteten Anwendungen gemeinsam genutzt wird. CAS und WPF bieten verschiedene Techniken zum Verwalten dieses Szenarios.
Erkennen von Berechtigungen mithilfe von CAS
In einigen Fällen ist es möglich, dass gemeinsam genutzter Code in Bibliotheksassemblys sowohl von eigenständigen Anwendungen als auch von XBAPs verwendet werden kann. In diesen Fällen kann Code Funktionen ausführen, die mehr Berechtigungen erfordern könnten, als der erteilte Berechtigungssatz der Anwendung zulässt. Ihre Anwendung kann erkennen, ob sie über eine bestimmte Berechtigung verfügt, indem Sie die Sicherheit von Microsoft .NET Framework verwenden. Insbesondere kann getestet werden, ob sie über eine bestimmte Berechtigung verfügt, indem sie die Demand Methode für die Instanz der gewünschten Berechtigung aufruft. Dies wird im folgenden Beispiel gezeigt, das Code enthält, mit dem abgefragt wird, ob eine Datei auf dem lokalen Datenträger gespeichert werden kann:
using System.IO;
using System.IO.IsolatedStorage;
using System.Security;
using System.Security.Permissions;
using System.Windows;
namespace SDKSample
{
public class FileHandling
{
public void Save()
{
if (IsPermissionGranted(new FileIOPermission(FileIOPermissionAccess.Write, @"c:\newfile.txt")))
{
// Write to local disk
using (FileStream stream = File.Create(@"c:\newfile.txt"))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine("I can write to local disk.");
}
}
else
{
MessageBox.Show("I can't write to local disk.");
}
}
// Detect whether or not this application has the requested permission
bool IsPermissionGranted(CodeAccessPermission requestedPermission)
{
try
{
// Try and get this permission
requestedPermission.Demand();
return true;
}
catch
{
return false;
}
}
Imports System.IO
Imports System.IO.IsolatedStorage
Imports System.Security
Imports System.Security.Permissions
Imports System.Windows
Namespace SDKSample
Public Class FileHandling
Public Sub Save()
If IsPermissionGranted(New FileIOPermission(FileIOPermissionAccess.Write, "c:\newfile.txt")) Then
' Write to local disk
Using stream As FileStream = File.Create("c:\newfile.txt")
Using writer As New StreamWriter(stream)
writer.WriteLine("I can write to local disk.")
End Using
End Using
Else
MessageBox.Show("I can't write to local disk.")
End If
End Sub
' Detect whether or not this application has the requested permission
Private Function IsPermissionGranted(ByVal requestedPermission As CodeAccessPermission) As Boolean
Try
' Try and get this permission
requestedPermission.Demand()
Return True
Catch
Return False
End Try
End Function
}
}
End Class
End Namespace
Wenn eine Anwendung nicht über die gewünschte Berechtigung verfügt, löst der Aufruf Demand eine Sicherheits ausnahme aus. Ansonsten wurde die Berechtigung erteilt.
IsPermissionGranted
kapselt dieses Verhalten und gibt true
oder false
zurück, wenn angemessen.
Sanfte Degradation der Funktionalität
Wenn Sie erkennen können, ob Code über die Berechtigung verfügt, zu tun, was er tun muss, ist interessant für Code, der aus verschiedenen Zonen ausgeführt werden kann. Die Erkennung der Zone ist zwar eine Sache, aber es ist viel besser, eine Alternative für den Benutzer bereitzustellen, wenn möglich. Beispielsweise ermöglicht eine voll vertrauenswürdige Anwendung benutzern in der Regel das Erstellen von Dateien an beliebiger Stelle, während eine teilweise vertrauenswürdige Anwendung nur Dateien im isolierten Speicher erstellen kann. Wenn der Code zum Erstellen einer Datei in einer Assembly vorhanden ist, die sowohl von voll vertrauenswürdigen (eigenständigen) Anwendungen als auch von teilweise vertrauenswürdigen (browsergehosteten) Anwendungen geteilt wird, und beide Anwendungen möchten, dass Benutzer Dateien erstellen können, sollte der freigegebene Code erkennen, ob sie teilweise oder vollständig vertrauenswürdig ausgeführt wird, bevor Sie eine Datei am entsprechenden Speicherort erstellen. Der folgende Code veranschaulicht beide.
using System.IO;
using System.IO.IsolatedStorage;
using System.Security;
using System.Security.Permissions;
using System.Windows;
namespace SDKSample
{
public class FileHandlingGraceful
{
public void Save()
{
if (IsPermissionGranted(new FileIOPermission(FileIOPermissionAccess.Write, @"c:\newfile.txt")))
{
// Write to local disk
using (FileStream stream = File.Create(@"c:\newfile.txt"))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine("I can write to local disk.");
}
}
else
{
// Persist application-scope property to
// isolated storage
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
using (IsolatedStorageFileStream stream =
new IsolatedStorageFileStream("newfile.txt", FileMode.Create, storage))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine("I can write to Isolated Storage");
}
}
}
// Detect whether or not this application has the requested permission
bool IsPermissionGranted(CodeAccessPermission requestedPermission)
{
try
{
// Try and get this permission
requestedPermission.Demand();
return true;
}
catch
{
return false;
}
}
Imports System.IO
Imports System.IO.IsolatedStorage
Imports System.Security
Imports System.Security.Permissions
Imports System.Windows
Namespace SDKSample
Public Class FileHandlingGraceful
Public Sub Save()
If IsPermissionGranted(New FileIOPermission(FileIOPermissionAccess.Write, "c:\newfile.txt")) Then
' Write to local disk
Using stream As FileStream = File.Create("c:\newfile.txt")
Using writer As New StreamWriter(stream)
writer.WriteLine("I can write to local disk.")
End Using
End Using
Else
' Persist application-scope property to
' isolated storage
Dim storage As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication()
Using stream As New IsolatedStorageFileStream("newfile.txt", FileMode.Create, storage)
Using writer As New StreamWriter(stream)
writer.WriteLine("I can write to Isolated Storage")
End Using
End Using
End If
End Sub
' Detect whether or not this application has the requested permission
Private Function IsPermissionGranted(ByVal requestedPermission As CodeAccessPermission) As Boolean
Try
' Try and get this permission
requestedPermission.Demand()
Return True
Catch
Return False
End Try
End Function
}
}
End Class
End Namespace
In vielen Fällen sollten Sie in der Lage sein, eine teilweise vertrauenswürdige Alternative zu finden.
In einer kontrollierten Umgebung, z. B. einem Intranet, können benutzerdefinierte verwaltete Frameworks über die Clientbasis im globalen Assemblycache (GAC) installiert werden. Diese Bibliotheken können Code ausführen, der vollen Vertrauens bedarf, und in Anwendungen referenziert werden, die nur teilweise vertrauenswürdig sind, indem sie AllowPartiallyTrustedCallersAttribute verwenden (weitere Informationen finden Sie unter Sicherheit und WPF-Sicherheitsstrategie – Plattformsicherheit).
Browserhosterkennung
Die Verwendung von CAS, um Berechtigungen zu prüfen, ist eine geeignete Technik, wenn Sie Berechtigungen einzeln überprüfen müssen. Diese Technik hängt zwar davon ab, Ausnahmen als Teil der normalen Verarbeitung abzufangen, was im Allgemeinen nicht empfohlen wird und Leistungsprobleme haben kann. Stattdessen können Sie die BrowserInteropHelper.IsBrowserHosted-Eigenschaft verwenden, die für XAML-Browseranwendungen (XBAPs), die nur innerhalb des Sandkastens der Internetzone ausgeführt werden, true zurückgibt.
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 WPF-Anwendungen, die im Browser gehostet werden (XBAP).
Hinweis
IsBrowserHosted unterscheidet nur, ob eine Anwendung in einem Browser ausgeführt wird und nicht mit welchen Berechtigungen eine Anwendung ausgeführt wird.
Verwalten von Berechtigungen
Standardmäßig werden XBAPs mit teilweiser Vertrauensstellung (Standardberechtigungssatz für Internetzonen) ausgeführt. Je nach den Anforderungen der Anwendung ist es jedoch möglich, den Satz von Berechtigungen von der Standardeinstellung zu ändern. Wenn z. B. ein XBAPs aus einem lokalen Intranet gestartet wird, kann er einen erhöhten Berechtigungssatz nutzen, der in der folgenden Tabelle dargestellt wird.
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 WPF-Anwendungen, die im Browser gehostet werden (XBAP).
Tabelle 3: Lokale Intranet- und Internetberechtigungen
Erlaubnis | Merkmal | LocalIntranet | Internet |
---|---|---|---|
Domain Name System (DNS) | Zugreifen auf DNS-Server | Ja | Nein |
Umgebungsvariablen | Lesen Sie | Ja | Nein |
Dateidialoge | Öffnen | Ja | Ja |
Dateidialoge | Nicht eingeschränkt | Ja | Nein |
Isolierter Speicher | Isolation der Assembly pro Benutzer | Ja | Nein |
Isolierter Speicher | Unbekannte Isolation | Ja | Ja |
Isolierter Speicher | Unbegrenztes Benutzerkontingent | Ja | Nein |
Medien | Sicheres Audio, Video und Bilder | Ja | Ja |
Druck | Standarddruck | Ja | Nein |
Druck | Sicherer Druck | Ja | Ja |
Spiegelung | Ausgabe | Ja | Nein |
Sicherheit | Verwaltete Codeausführung | Ja | Ja |
Sicherheit | Bestätigen erteilter Berechtigungen | Ja | Nein |
Benutzeroberfläche | Nicht eingeschränkt | Ja | Nein |
Benutzeroberfläche | Sichere Fenster der obersten Ebene | Ja | Ja |
Benutzeroberfläche | Eigene Zwischenablage | Ja | Ja |
Webbrowser | Sichere Framenavigation zu HTML | Ja | Ja |
Hinweis
"Ausschneiden und Einfügen" ist nur im eingeschränkten Vertrauensmodus erlaubt, wenn es vom Benutzer initiiert wird.
Wenn Sie Berechtigungen erhöhen müssen, müssen Sie die Projekteinstellungen und das ClickOnce-Anwendungsmanifest ändern. Weitere Informationen finden Sie in der Übersicht über WPF-XAML-Browseranwendungen. Die folgenden Dokumente können auch hilfreich sein.
Wenn Ihr XBAP voll vertrauenswürdig ist, können Sie dieselben Tools verwenden, um die angeforderten Berechtigungen zu erhöhen. Obwohl ein XBAP nur voll vertrauenswürdig wird, wenn es auf dem lokalen Computer, dem Intranet oder von einer URL installiert und gestartet wird, die in den vertrauenswürdigen oder zulässigen Websites des Browsers aufgeführt ist. Wenn die Anwendung über das Intranet oder eine vertrauenswürdige Website installiert ist, erhält der Benutzer die standardmäßige ClickOnce-Eingabeaufforderung, die sie über die erhöhten Berechtigungen benachrichtigt. Der Benutzer kann die Installation fortsetzen oder abbrechen.
Alternativ können Sie das ClickOnce Trusted Deployment-Modell für die voll vertrauenswürdige Bereitstellung aus einer beliebigen Sicherheitszone verwenden. Weitere Informationen finden Sie unter "Übersicht über die Bereitstellung vertrauenswürdiger Anwendungen" und "Sicherheit".
Siehe auch
.NET Desktop feedback