Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
En général, les applications Internet doivent être limitées à l’accès direct aux ressources système critiques, afin d’éviter les dommages malveillants. Par défaut, les langages de script HTML et côté client ne sont pas en mesure d’accéder aux ressources système critiques. Étant donné que les applications hébergées par le navigateur Windows Presentation Foundation (WPF) peuvent être lancées à partir du navigateur, elles doivent être conformes à un ensemble similaire de restrictions. Pour appliquer ces restrictions, WPF s’appuie sur la sécurité d’accès au code (CAS) et sur ClickOnce (voir Stratégie de sécurité WPF - Sécurité de la plateforme). Par défaut, les applications hébergées par navigateur demandent l’ensemble d’autorisations d’administration centrale de zone Internet, qu’elles soient lancées à partir d’Internet, de l’intranet local ou de l’ordinateur local. Les applications qui s’exécutent avec n’importe quoi de moins que l’ensemble complet d’autorisations sont considérées comme s’exécutant avec une confiance partielle.
Avertissement
Les XBAPs nécessitent des navigateurs anciens pour fonctionner, tels qu’Internet Explorer et les anciennes versions de Firefox. Ces navigateurs plus anciens ne sont généralement pas pris en charge sur Windows 10 et Windows 11. Les navigateurs modernes ne prennent plus en charge la technologie requise pour les applications XBAP en raison des risques de sécurité. Les plug-ins qui activent les XBAPs ne sont plus pris en charge. Pour plus d’informations, consultez Questions fréquemment posées sur les applications WPF hébergées dans un navigateur (XBAP).
WPF fournit un large éventail de prise en charge pour s’assurer que la plupart des fonctionnalités possibles peuvent être utilisées en toute sécurité dans la confiance partielle, et avec le cas, fournit une prise en charge supplémentaire pour la programmation de confiance partielle.
Cette rubrique contient les sections suivantes :
Prise en charge de l’approbation partielle des fonctionnalités WPF
Avertissement
La sécurité d’accès au code (CAS) n’est pas prise en charge par .NET moderne, il s’agit d’un concept .NET Framework uniquement. Toutes les fonctionnalités liées à CAS sont traitées selon le présupposé de pleine confiance. Pour plus d’informations, consultez Différences avec WPF .NET - Sécurité de l’accès au code.
Le tableau suivant répertorie les fonctionnalités générales de Windows Presentation Foundation (WPF) qui sont sécurisées à utiliser dans les limites du jeu d’autorisations de zone Internet.
Tableau 1 : Fonctionnalités WPF sécurisées dans l’approbation partielle
Zone des fonctionnalités | Caractéristique |
---|---|
Généralités | Fenêtre du navigateur Accès au site d’origine IsolatedStorage (limite de 512 Ko) Fournisseurs UIAutomation Commandement Éditeurs de méthode d’entrée (IMEs) Stylet de tablette et encre Glisser-déplacer simulé à l’aide de la capture de souris et déplacer des événements OpenFileDialog Désérialisation XAML (via XamlReader.Load) |
Intégration web | Boîte de dialogue Téléchargement du navigateur Navigation Top-Level User-Initiated mailto :links Paramètres d’identificateur de ressource uniforme HTTPWebRequest Contenu WPF hébergé dans un IFRAME Hébergement de pages HTML Same-Site à l’aide de Frame Hébergement de pages HTML de même site à l’aide de WebBrowser Services Web (ASMX) Services web (à l’aide de Windows Communication Foundation) Écriture de scripts Modèle objet de document |
Visuels | 2D et 3D Animation Média (site d’origine et inter-domaines) Imagerie/audio/vidéo |
Lecture | FlowDocuments XPS Documents Polices incorporées et polices système Polices CFF & TrueType |
Modification | Vérification orthographique RichTextBox Prise en charge du presse-papiers pour le texte clair et le manuscrit User-Initiated Coller Copie du contenu sélectionné |
Contrôles | Contrôles généraux |
Ce tableau couvre les fonctionnalités WPF à un niveau élevé. Pour plus d’informations, le Kit de développement logiciel (SDK) Windows documente les autorisations requises par chaque membre dans WPF. En outre, les fonctionnalités suivantes ont des informations plus détaillées sur l'exécution avec confiance partielle, notamment des considérations spéciales.
XAML (voir XAML dans WPF).
Fenêtres contextuelles (voir System.Windows.Controls.Primitives.Popup).
Glisser-déplacer (voir Vue d’ensemble du glisser-déplacer).
Presse-papiers (voir System.Windows.Clipboard).
Imagerie (voir System.Windows.Controls.Image).
Sérialisation (voir XamlReader.Load, XamlWriter.Save).
Boîte de dialogue d'ouverture de fichier (voir Microsoft.Win32.OpenFileDialog).
Le tableau suivant présente les fonctionnalités WPF qui ne sont pas sécurisées pour s’exécuter dans les limites du jeu d’autorisations de zone Internet.
Tableau 2 : Fonctionnalités WPF qui ne sont pas sécurisées dans la confiance partielle
Zone des fonctionnalités | Caractéristique |
---|---|
Généralités | Fenêtre (Fenêtres définies par l’application et boîtes de dialogue) Boîte de dialogue Enregistrer le fichier Système de fichiers Accès au Registre Glisser-déplacer Sérialisation XAML (via XamlWriter.Save) UIAutomation Clients Accès à la fenêtre source (HwndHost) Prise en charge vocale complète Interopérabilité Windows Forms |
Visuels | Effets bitmap Encodage d’image |
Modification | Presse-papiers au format texte enrichi Prise en charge complète du code XAML |
Programmation de confiance partielle
Pour les applications XBAP, le code qui dépasse le jeu d’autorisations par défaut aura un comportement différent en fonction de la zone de sécurité. Dans certains cas, l’utilisateur reçoit un avertissement lorsqu’il tente de l’installer. L’utilisateur peut choisir de continuer ou d’annuler l’installation. Le tableau suivant décrit le comportement de l’application pour chaque zone de sécurité et ce que vous devez faire pour que l’application reçoive une confiance totale.
Avertissement
Les XBAPs nécessitent des navigateurs anciens pour fonctionner, tels qu’Internet Explorer et les anciennes versions de Firefox. Ces navigateurs plus anciens ne sont généralement pas pris en charge sur Windows 10 et Windows 11. Les navigateurs modernes ne prennent plus en charge la technologie requise pour les applications XBAP en raison des risques de sécurité. Les plug-ins qui activent les XBAPs ne sont plus pris en charge. Pour plus d’informations, consultez Questions fréquemment posées sur les applications WPF hébergées dans un navigateur (XBAP).
Zone de sécurité | Comportement | Obtention d’une confiance totale |
---|---|---|
Ordinateur local | Confiance totale automatique | Aucune action n’est nécessaire. |
Sites intranet et sites de confiance | Invitation à accorder une confiance totale | Signez le XBAP avec un certificat afin que l’utilisateur voit la source dans l’invite. |
Internet | Échec avec « Confiance non accordée » | Signez le XBAP avec un certificat. |
Remarque
Le comportement décrit dans le tableau précédent est destiné aux XBAP de confiance totale qui ne suivent pas le modèle de déploiement approuvé ClickOnce.
En général, le code qui peut dépasser les autorisations autorisées est susceptible d’être du code commun partagé entre les applications autonomes et hébergées par le navigateur. CAS et WPF offrent plusieurs techniques de gestion de ce scénario.
Détection des autorisations à l’aide du système d’administration centrale
Dans certains cas, il est possible que le code partagé dans les assemblys de bibliothèque soit utilisé par les applications autonomes et les XBAPs. Dans ce cas, le code peut exécuter des fonctionnalités qui peuvent nécessiter plus d’autorisations que le jeu d’autorisations accordé par l’application. Votre application peut détecter si elle dispose ou non d’une certaine autorisation à l’aide de la sécurité de Microsoft .NET Framework. Plus précisément, il peut tester s’il dispose d’une autorisation spécifique en appelant la Demand méthode sur l’instance de l’autorisation souhaitée. Ceci est illustré dans l’exemple suivant, qui contient du code qui demande s’il a la possibilité d’enregistrer un fichier sur le disque local :
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
Si une application n’a pas l’autorisation souhaitée, l’appel à Demand levera une exception de sécurité. Sinon, l’autorisation a été accordée.
IsPermissionGranted
encapsule ce comportement et retourne true
ou false
le cas échéant.
Dégradation appropriée des fonctionnalités
Être en mesure de détecter si le code a l’autorisation de faire ce qu’il doit faire est intéressant pour le code qui peut être exécuté à partir de différentes zones. Bien que la détection de la zone soit une chose, il est bien préférable de fournir une alternative pour l’utilisateur, si possible. Par exemple, une application de confiance totale permet généralement aux utilisateurs de créer des fichiers où qu’ils souhaitent, tandis qu’une application d’approbation partielle ne peut créer que des fichiers dans un stockage isolé. Si le code permettant de créer un fichier existe dans un assembly partagé par des applications de confiance totale (autonome) et des applications d’approbation partielle (hébergée par le navigateur), et que les deux applications veulent que les utilisateurs puissent créer des fichiers, le code partagé doit détecter s’il s’exécute en confiance partielle ou totale avant de créer un fichier à l’emplacement approprié. Le code suivant illustre les deux.
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
Dans de nombreux cas, vous devriez être en mesure de trouver une alternative de confiance partielle.
Dans un environnement contrôlé, tel qu’un intranet, des frameworks managés personnalisés peuvent être installés sur la base cliente dans le Global Assembly Cache (GAC). Ces bibliothèques peuvent exécuter du code nécessitant une confiance totale et être référencées à partir d’applications auxquelles seule une confiance partielle est accordée via AllowPartiallyTrustedCallersAttribute (pour plus d’informations, consultez Sécurité et Stratégie de sécurité WPF - Sécurité de la plateforme).
Détection de l’hôte du navigateur
L’utilisation du système d’administration centrale pour vérifier les autorisations est une technique appropriée lorsque vous devez vérifier par autorisation. Bien que cette technique dépende de l’interception d’exceptions dans le cadre d’un traitement normal, ce qui n’est pas recommandé en général et peut entraîner des problèmes de performances. Au lieu de cela, si votre application de navigateur XAML (XBAP) s'exécute uniquement dans le sandbox de la zone Internet, vous pouvez utiliser BrowserInteropHelper.IsBrowserHosted propriété, qui retourne vrai pour les applications de navigateur XAML (XBAPs).
Avertissement
Les XBAPs nécessitent des navigateurs anciens pour fonctionner, tels qu’Internet Explorer et les anciennes versions de Firefox. Ces navigateurs plus anciens ne sont généralement pas pris en charge sur Windows 10 et Windows 11. Les navigateurs modernes ne prennent plus en charge la technologie requise pour les applications XBAP en raison des risques de sécurité. Les plug-ins qui activent les XBAPs ne sont plus pris en charge. Pour plus d’informations, consultez Questions fréquemment posées sur les applications WPF hébergées dans un navigateur (XBAP).
Remarque
IsBrowserHosted distingue uniquement si une application est en cours d’exécution dans un navigateur, et non pas avec quel ensemble d’autorisations une application est en cours d’exécution.
Gestion des autorisations
Par défaut, les XBAPs s'exécutent avec une confiance partielle (jeu d'autorisations de la zone Internet par défaut). Toutefois, en fonction des exigences de l’application, il est possible de modifier l’ensemble d’autorisations par défaut. Par exemple, si un XBAPs est lancé à partir d’un intranet local, il peut tirer parti d’un jeu d’autorisations accru, illustré dans le tableau suivant.
Avertissement
Les XBAPs nécessitent des navigateurs anciens pour fonctionner, tels qu’Internet Explorer et les anciennes versions de Firefox. Ces navigateurs plus anciens ne sont généralement pas pris en charge sur Windows 10 et Windows 11. Les navigateurs modernes ne prennent plus en charge la technologie requise pour les applications XBAP en raison des risques de sécurité. Les plug-ins qui activent les XBAPs ne sont plus pris en charge. Pour plus d’informations, consultez Questions fréquemment posées sur les applications WPF hébergées dans un navigateur (XBAP).
Tableau 3 : Autorisations LocalIntranet et Internet
Autorisation | Caractéristique | LocalIntranet | Internet |
---|---|---|---|
Système de noms de domaine (DNS) | Accéder aux serveurs DNS | Oui | Non |
Variables d’environnement | Lire | Oui | Non |
Boîtes de dialogue de fichiers | Ouvrir | Oui | Oui |
Boîtes de dialogue de fichiers | Non restreint | Oui | Non |
Stockage isolé | Isolation de l’assembly par l’utilisateur | Oui | Non |
Stockage isolé | Isolation inconnue | Oui | Oui |
Stockage isolé | Quota d’utilisateurs illimité | Oui | Non |
Média | Audio, vidéo et images sécurisés | Oui | Oui |
Impression | Impression par défaut | Oui | Non |
Impression | Impression sécurisée | Oui | Oui |
Réflexion | Émettre | Oui | Non |
Sécurité | Exécution de code managé | Oui | Oui |
Sécurité | Assertion d’autorisations accordées | Oui | Non |
Interface utilisateur | Non restreint | Oui | Non |
Interface utilisateur | Fenêtres de niveau supérieur sécurisées | Oui | Oui |
Interface utilisateur | Presse-papiers personnel | Oui | Oui |
Navigateur Web | Navigation avec trame sécurisée au format HTML | Oui | Oui |
Remarque
Couper et coller n’est autorisé qu’en confiance limitée lorsqu'initié par l'utilisateur.
Si vous devez augmenter les autorisations, vous devez modifier les paramètres du projet et le manifeste de l’application ClickOnce. Pour plus d’informations, consultez vue d’ensemble des applications de navigateur XAML WPF. Les documents suivants peuvent également être utiles.
Si votre XBAP nécessite une confiance totale, vous pouvez utiliser les mêmes outils pour augmenter les autorisations demandées. Bien qu’un XBAP reçoive uniquement une confiance totale s’il est installé et lancé à partir de l’ordinateur local, de l’intranet ou d’une URL répertoriée dans les sites approuvés ou autorisés du navigateur. Si l’application est installée à partir de l’intranet ou d’un site approuvé, l’utilisateur reçoit l’invite ClickOnce standard qui les informe des autorisations élevées. L’utilisateur peut choisir de continuer ou d’annuler l’installation.
Vous pouvez également utiliser le modèle de déploiement approuvé ClickOnce pour un déploiement en pleine confiance à partir de n’importe quelle zone de sécurité. Pour plus d’informations, consultez Vue d’ensemble et sécurité du déploiement d’applications approuvées.
Voir aussi
.NET Desktop feedback