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.

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.