Sécurité de confiance partielle de Windows Presentation Foundation
Mise à jour : Juillet 2008
En règle générale, les applications Internet doivent disposer d'un accès direct limité aux ressources système critiques pour éviter des dégâts dus à des actes de malveillance. Par défaut, le langage HTML et le langage de script côté client ne peuvent pas accéder à des ressources système critiques. Comme les applications hébergées par le navigateur de Windows Presentation Foundation (WPF) peuvent être lancées à partir du navigateur, elles doivent se conformer à un jeu de restrictions similaires. Pour appliquer ces restrictions, WPF s'appuie sur la sécurité d'accès du code (CAS, Code Access Security) et sur ClickOnce (voir Stratégie de sécurité de Windows Presentation Foundation – sécurité de la plateforme). Par défaut, les applications hébergées par le navigateur demandent un jeu d'autorisations CAS de la zone Internet, qu'elles aient été lancées à partir d'Internet, de l'intranet local ou de l'ordinateur local. Les applications qui sont exécutées sans jeu d'autorisations complet sont exécutées avec une confiance dite partielle.
WPF assure de nombreuses prises en charge pour que le plus grand nombre possible de fonctionnalités puissent être utilisées en toute sécurité avec une confiance partielle et prend également en charge la programmation de la confiance partielle avec la CAS.
Cette rubrique comprend les sections suivantes.
- Prise en charge de la confiance partielle avec des fonctionnalités WPF
- Programmation de la confiance partielle
- Gestion des autorisations
- Rubriques connexes
Prise en charge de la confiance partielle avec des fonctionnalités WPF
Le tableau suivant présente les fonctionnalités de base de Windows Presentation Foundation (WPF) pouvant être utilisées en toute sécurité dans le cadre du jeu d'autorisations de la zone Internet.
Tableau 1 : Fonctionnalités WPF pouvant être utilisées en toute sécurité avec une confiance partielle
Domaine de fonctionnalités |
Feature |
---|---|
Général |
Fenêtre du navigateur Accès au site d'origine IsolatedStorage (limité à 512 Ko) Fournisseurs UIAutomation Commandes Éditeurs de méthode d'entrée (IME, Input Method Editor) Stylet et encre Glisser-déplacer simulé à l'aide d'événements de capture de la souris et de déplacement OpenFileDialog Désérialisation XAML (via XamlReader.Load) |
Intégration Web |
Boîte de dialogue de téléchargement dans un navigateur Navigation de niveau supérieur initiée par l'utilisateur mailto:links Paramètres de l'URI (Uniform Resource Identifier) HTTPWebRequest Contenu WPF hébergé dans un IFRAME Hébergement de pages HTML sur le même site à l'aide d'un Frame Hébergement de pages HTML sur le même site à l'aide d'un WebBrowser Services Web (ASMX) Services Web (utilisant Windows Communication Foundation) |
Objets visuels |
2D et 3D Animation Média (site d'origine et interdomaines) Images/Audio/Vidéo |
Lecture |
FlowDocuments Documents XPS Polices système et incorporées Polices CFF et TrueType |
Modification |
Vérification de l'orthographe RichTextBox Prise en charge du Presse-papiers pour l'encre et le texte brut Coller initié par l'utilisateur Copie du contenu sélectionné |
Contrôles |
Contrôle généraux |
Ce tableau présente les fonctionnalités de base de WPF. Pour plus d'informations, le Kit de développement logiciel (SDK) Windows documente les autorisations qui sont requises par chaque membre dans WPF. Les fonctionnalités suivantes proposent en outre des informations plus détaillées sur l'exécution de confiance partielle, y compris des considérations spéciales.
Services Web utilisant Windows Communication Foundation (consultez Confiance partielle).
XAML (voir Vue d'ensemble du langage XAML).
Menus contextuels (voir System.Windows.Controls.Primitives.Popup).
Glisser-déplacer (voir Vue d'ensemble du glisser-déplacer).
Presse-papiers (voir System.Windows.Clipboard).
Images (voir System.Windows.Controls.Image).
Sérialisation (voir XamlReader.Load, XamlWriter.Save).
Boîte de dialogue Ouvrir un fichier (voir Microsoft.Win32.OpenFileDialog).
Les fonctionnalités WPF ne pouvant pas être exécutées en toute sécurité dans le cadre du jeu d'autorisations de la zone Internet sont présentées dans le tableau suivant.
Tableau 2 : Fonctionnalités WPF ne pouvant pas être exécutées en toute sécurité avec une confiance partielle
Domaine de fonctionnalités |
Feature |
---|---|
Général |
Fenêtre (boîtes de dialogue et fenêtres définies par l'application) SaveFileDialog Système de fichiers Accès au Registre Glisser-déplacer Sérialisation XAML (via XamlWriter.Save) Clients UIAutomation Accès à la fenêtre source (HwndHost) Prise en charge vocale intégrale Interopérabilité Windows Forms |
Intégration Web |
Scripts Document Object Model |
Objets visuels |
Effets bitmap Codage d'images |
Modification |
Presse-papiers Rich Text Format Prise en charge XAML intégrale |
Programmation de la confiance partielle
Pour les applications XBAP, le code qui dépasse le cadre du jeu d'autorisations de la zone Internet par défaut est déterminé par la CAS, ce qui lève une exception de sécurité et ferme l'application. Même si cela protège les utilisateurs, cela ne procure pas une expérience utilisateur optimale.
Il est généralement possible que le code qui risque de dépasser le cadre des autorisations accordées soit du code commun partagé entre des applications autonomes et des applications hébergées par le navigateur. La CAS et WPF proposent plusieurs techniques permettant de gérer ce scénario.
Détermination des autorisations à l'aide de la sécurité d'accès du code
Dans certains cas, le code partagé qui figure dans des assemblys de bibliothèque peut être utilisé par des applications autonomes et des applications XBAP. Le code risque alors d'exécuter des fonctionnalités qui pourraient requérir d'autres autorisations que celles accordées par le jeu d'autorisations de l'application. Votre application peut déterminer si une autorisation donnée lui est accordée à l'aide de la sécurité Microsoft .NET Framework. Elle peut plus particulièrement tester si une autorisation donnée lui est accordée en appelant la méthode Demand sur l'instance de l'autorisation en question. Cette vérification est illustrée dans l'exemple ci-dessous, où le code vérifie s'il peut enregistrer un fichier sur le disque local :
Lorsqu'une autorisation n'est pas accordée à une application, l'appel à Demand lève une exception de sécurité. Sinon, cela signifie que l'autorisation a été accordée. IsPermissionGranted encapsule ce comportement et retourne true ou false, selon le cas.
Dégradation progressive des fonctionnalités
Pour du code qui peut être exécuté à partir de différentes zones, il est intéressant de pouvoir déterminer si une autorisation de faire ce qu'il a besoin de faire lui est accordée ou non. Même si la détermination de la zone est un élément, il est de loin préférable de proposer si possible une alternative à l'utilisateur. Par exemple, une application de confiance totale permet généralement aux utilisateurs de créer des fichiers où bon leur semble, alors qu'une application de confiance partielle ne leur permet de créer des fichiers que dans le stockage isolé. Si du code permettant de créer un fichier figure dans un assembly (.dll) qui est partagé par des applications de confiance totale (applications autonomes) et des applications de confiance partielle (applications hébergées par le navigateur) et que les deux applications souhaitent que les utilisateurs puissent créer des fichiers, le code partagé doit alors déterminer s'il est exécuté avec une confiance partielle ou totale avant de créer un fichier à l'emplacement indiqué. Le code suivant illustre ces deux cas de figure :
Dans de nombreux cas, vous devez pouvoir trouver une alternative à la confiance partielle.
Dans un environnement contrôlé, tel qu'un intranet, vous pouvez installer des infrastructures managées personnalisées sur la base cliente dans le Global Assembly Cache (GAC). Grâce à AllowPartiallyTrustedCallersAttribute, ces bibliothèques peuvent exécuter du code qui requiert une confiance totale et être référencées à partir d'applications de confiance partielle uniquement (pour plus d'informations, consultez Sécurité de Windows Presentation Foundation et Stratégie de sécurité de Windows Presentation Foundation – sécurité de la plateforme).
Détermination de l'hôte de navigateur
L'utilisation de la CAS pour vérifier si des autorisations sont accordées est une technique indiquée lorsque vous devez effectuer des vérifications autorisation par autorisation. Cette technique dépend toutefois de l'interception d'exceptions dans le cadre d'un traitement normal, ce qui n'est généralement pas recommandé et risque d'entraîner des problèmes de performances. Si votre application du navigateur XAML (XBAP) est uniquement exécutée dans le bac à sable de la zone Internet, vous pouvez alors utiliser BrowserInteropHelper.IsBrowserHosted, qui retourne la valeur true pour les applications du navigateur XAML (XBAP).
Consultez Détection de l'hébergement dans un navigateur, exemple.
Remarque : |
---|
IsBrowserHosted peut uniquement déterminer si une application est exécutée dans un navigateur. Il ne peut pas déterminer le jeu d'autorisations avec lequel une application est exécutée. |
Gestion des autorisations
Par défaut, les applications XBAP sont exécutées avec une confiance partielle (jeu d'autorisations de la zone Internet par défaut). En fonction des besoins de l'application, il est toutefois possible de changer le jeu d'autorisations par défaut. Par exemple, si une application XBAP est lancée à partir d'un intranet local, elle peut alors bénéficier d'un jeu d'autorisations plus complet qui est indiqué dans le tableau ci-dessous.
Tableau 3 : Autorisations LocalIntranet et Internet
Autorisation |
Attribut |
LocalIntranet |
Internet |
---|---|---|---|
DNS |
Serveurs d'accès DNS |
Oui |
No |
Variables d'environnement |
Read |
Oui |
No |
Boîtes de dialogue Fichier |
Ouvrir |
Oui |
Oui |
Boîtes de dialogue Fichier |
Non restreint |
Oui |
No |
Stockage isolé |
Isolation de l'assembly par utilisateur |
Oui |
No |
Stockage isolé |
Isolation inconnue |
Oui |
Oui |
Stockage isolé |
Quota utilisateur illimité |
Oui |
No |
Multimédia |
Audio, vidéo et images sécurisés |
Oui |
Oui |
Impression |
Impression par défaut |
Oui |
No |
Impression |
Impression sécurisée |
Oui |
Oui |
Réflexion |
Émission |
Oui |
No |
Security |
Exécution du code managé |
Oui |
Oui |
Security |
Assertion des autorisations accordées |
Oui |
No |
Interface utilisateur |
Non restreint |
Oui |
No |
Interface utilisateur |
Fenêtres de niveau supérieur sécurisées |
Oui |
Oui |
Interface utilisateur |
Propre Presse-papiers |
Oui |
Oui |
Navigateur Web |
Navigation de frame sécurisée vers HTML |
Oui |
Oui |
Si vous avez besoin de compléter des autorisations, vous pouvez utiliser l'un des outils suivants :
Si votre application XBAP requiert une confiance totale, vous pouvez utiliser les mêmes outils pour compléter les autorisations demandées. Une confiance totale n'est toutefois attribuée à une application XBAP que si elle est installée sur l'ordinateur local ou est lancée à partir de l'ordinateur local. En d'autres termes, la prise en charge de la mise à jour automatique que vous obtenez lorsque vous publiez des applications XBAP sur des serveurs Web n'est pas conservée.
Voir aussi
Concepts
Sécurité de Windows Presentation Foundation
Stratégie de sécurité de Windows Presentation Foundation – sécurité de la plateforme
Stratégie de sécurité de Windows Presentation Foundation – ingénierie de sécurité
Historique des modifications
Date |
Historique |
Raison |
---|---|---|
Juillet 2008 |
Ajout d'une mention sur le nouveau contrôle WebBrowser. |
Modifications de fonctionnalités dans le SP1. |