Sécurité de Windows Presentation Foundation

Mise à jour : novembre 2007

Cette rubrique décrit le modèle de sécurité des applications Windows Presentation Foundation (WPF) autonomes et hébergées par un navigateur.

Les applications autonomes WPF s'exécutent avec des autorisations illimitées (jeu d'autorisations FullTrust CAS), qu'elles soient déployées à l'aide de Windows Installer (.msi), XCopy DOS ou ClickOnce.

Les applications hébergées par un navigateur WPF sont hébergées par Windows Internet Explorer et peuvent être des applications du navigateur XAML (XBAP) ou du XAML (Extensible Application Markup Language) libre (voir Vue d'ensemble des applications de navigateur XAML Windows Presentation Foundation).

Les applications hébergées par un navigateur WPF s'exécutent par défaut dans un bac à sable (sandbox) de sécurité de confiance partielle, qui est limité au jeu d'autorisations Internet CAS par défaut. Cela permet d'isoler efficacement les applications hébergées par un navigateur WPF de l'ordinateur client, de la même façon que pour des applications Web typiques. La sécurité de confiance partielle est décrite en détail dans Sécurité de confiance partielle de Windows Presentation Foundation.

Cette rubrique comprend les sections suivantes.

  • Navigation sécurisée
  • Paramètres de sécurité Internet Explorer
  • Désactivation des assemblys APTCA pour les applications clientes d'un niveau de confiance partiel
  • Sandboxing des fichiers XAML libres externes
  • Meilleures pratiques pour développer des applications WPF sécurisées
  • Rubriques connexes

Pour XBAP, WPF distingue deux types de portées de navigation : application et navigateur.

La navigation dans une application est la navigation entre les éléments du contenu à l'intérieur d'une application qui est hébergée par un navigateur, alors que la navigation dans un navigateur est la navigation qui change le contenu du navigateur lui-même. La relation entre ces types de navigation est représentée sur la figure suivante :

Diagramme de navigation

Le type de contenu considéré comme sécurisé pour la navigation à partir d'une application XBAP dépend essentiellement du fait qu'il s'agisse d'une navigation dans une application ou dans un navigateur.

Sécurité de la navigation dans une application

La navigation de portée application est considérée comme sécurisée si elle peut être identifiée avec un URI à en-tête pack, qui prend en charge quatre types de contenu :

  • Fichiers de ressources, qui sont ajoutés à un projet avec un type de build Ressource et peuvent être identifiés avec un URI semblable au suivant :

    pack://application:,,,/MyResourceFile.xaml

  • Fichiers de contenu, qui sont ajoutés à un projet avec un type de build Contenu et peuvent être identifiés avec un URI semblable au suivant :

    pack://application:,,,/MyContentFile.xaml

  • Fichiers de site d'origine, qui sont ajoutés à un projet avec un type de build Aucun et peuvent être identifiés avec un URI semblable au suivant :

    pack://siteoforigin:,,,/MySiteOfOriginFile.xaml

  • Fichiers de code d'application, qui sont ajoutés à un projet avec un type de build Page et peuvent être identifiés avec un URI semblable au suivant :

    pack://application:,,,/MyResourceFile.xaml

Remarque :

Pour plus d'informations sur les fichiers des données d'application et les URI à en-tête pack, consultez Fichiers de ressources, de contenu et de données d'une application Windows Presentation Foundation.

Vous pouvez accéder aux fichiers appartenant à ces types de contenu suite à une navigation utilisateur ou une navigation par programme :

  • Navigation utilisateur. L'utilisateur a lancé la navigation en cliquant sur un élément Hyperlink.

  • Navigation par programme. L'application a lancé la navigation sans intervention de l'utilisateur.

Sécurité de la navigation dans un navigateur

La navigation dans un navigateur est considérée comme sécurisée uniquement si les conditions suivantes sont respectées :

  • Navigation utilisateur. L'utilisateur a lancé la navigation en cliquant sur un élément Hyperlink.

  • Zone. Le contenu sur lequel porte la navigation se situe sur Internet ou un intranet local.

  • Protocole. Le protocole utilisé est l'un des suivants : http:, https:, file: ou mailto:.

Si une application XBAP tente d'accéder au contenu sans respecter ces conditions, une exception SecurityException est levée.

Paramètres de sécurité Internet Explorer

Internet Explorer est doté d'un mécanisme qui vous permet de configurer la fonctionnalité que vous pouvez exécuter dans ou à partir de Internet Explorer, notamment :

  • Composants appartenant au .NET Framework

  • Contrôles et plug-ins ActiveX

  • Téléchargements

  • Scripts

  • Authentification utilisateur

Un paramètre de sécurité détermine si une fonctionnalité peut s'exécuter et comment elle s'exécute. Vous pouvez configurer ce paramètre pour activer ou désactiver complètement la fonctionnalité, ou pour inviter l'utilisateur à décider lors de chaque tentative d'exécution d'une fonctionnalité.

La collection de fonctionnalités pouvant être sécurisée de cette façon est configurée pour chacune des zones suivantes : Internet, Intranet, Sites de confiance et Sites non fiables. Pour configurer les paramètres de sécurité, procédez comme suit :

  1. Ouvrez Internet Explorer.

  2. Dans le menu Outils, cliquez sur Sécurité.

  3. Sélectionnez la zone pour laquelle vous voulez configurer les paramètres de sécurité.

  4. Cliquez sur le bouton Personnaliser le niveau.

Dans la boîte de dialogue Paramètres de sécurité qui s'ouvre, vous pouvez configurer les paramètres de sécurité pour la zone sélectionnée.

Boîte de dialogue Paramètres de sécurité

Windows Internet Explorer 7 comprend les quatre paramètres de sécurité ci-dessous, spécifiques au .NET Framework:

  • XAML libre. Détermine si Internet Explorer 7 peut accéder aux fichiers XAML et les libérer (options Activer, Désactiver et Demander).

  • Applications du navigateur XAML. Détermine si Internet Explorer 7 peut accéder aux fichiers XBAP et les exécuter (options Activer, Désactiver et Demander).

  • Documents XPS. Détermine si Internet Explorer 7 peut accéder aux documents XML Paper Specification (XPS) et les charger (options Activer, Désactiver et Demander).

  • Autoriser l'installation de .NET Framework. Détermine si le .NET Framework peut être installé via Internet Explorer 7 (options Activer ou Désactiver uniquement).

  • Par défaut, ces paramètres sont tous activés pour les zones Internet, Intranet local et Sites de confiance et désactivés pour la zone Sites non fiables.

Paramètres de sécurité pour IE6 et versions précédentes

Pour les versions de Internet Explorer autres que Internet Explorer, les paramètres de sécurité relatifs aux différents paramètres du .NET Framework peuvent être configurés dans le Registre, sous la clé suivante :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features

Le tableau suivant décrit les différentes valeurs pouvant être utilisées.

Nom de la valeur

Type valeur

Données de la valeur

XBAPDisallow

REG_DWORD

1 pour désactiver ; 0 pour activer.

LooseXamlDisallow

REG_DWORD

1 pour désactiver ; 0 pour activer.

WebBrowserDisallow

REG_DWORD

1 pour désactiver ; 0 pour activer.

XPSDocumentsDisallow

REG_DWORD

1 pour désactiver ; 0 pour activer.

MediaAudioDisallow

REG_DWORD

1 pour désactiver ; 0 pour activer.

MediaImageDisallow

REG_DWORD

1 pour désactiver ; 0 pour activer.

MediaVideoDisallow

REG_DWORD

1 pour désactiver ; 0 pour activer.

Remarque :

Parmi ces valeurs, XBAPDisallow et WebBrowserDisallow fonctionnent pour toutes les versions de Internet Explorer.

Désactivation des assemblys APTCA pour les applications clientes d'un niveau de confiance partiel

Lorsque des assemblys managés sont installés dans le Global Assembly Cache (GAC), ils sont tous d'un niveau de confiance suffisant puisque l'utilisateur doit fournir une autorisation pour les installer. Comme ils ont un niveau de confiance suffisant, seules les applications clientes parfaitement fiables peuvent utiliser ces assemblys. Pour autoriser les applications d'un niveau de confiance partiel à utiliser ces assemblys, ils doivent porter l'attribut AllowPartiallyTrustedCallersAttribute (APTCA). Seuls les assemblys dont l'exécution dans des situations d'un niveau de confiance partiel a été testée doivent être marqués avec cet attribut.

Toutefois, il est possible qu'un assembly APTCA présente un défaut de sécurité après avoir été installé dans le GAC. Si un défaut de sécurité est détecté, les éditeurs de l'assembly peuvent fournir un correctif pour résoudre le problème sur les installations existantes et pour protéger les installations réalisées après la détection du problème. L'une des options du correctif consiste à désinstaller l'assembly, bien que cela risque de bloquer d'autres applications clientes parfaitement fiables qui utilisent l'assembly.

WPF possède un mécanisme grâce auquel un assembly APTCA peut être désactivé pour les applications WPF d'un niveau de confiance partiel, notamment XBAP, sans désinstaller l'assembly APTCA.

Pour désactiver un assembly APTCA, vous devez créer une clé spéciale sous la clé de Registre suivante :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\<AssemblyFullName>, FileVersion=<AssemblyFileVersion>

Voici un exemple de clé :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\aptcagac, Version=1.0.0.0, Culture=neutral, PublicKeyToken=215e3ac809a0fea7, FileVersion=1.0.0.0

Cela crée une entrée pour l'assembly APTCA, mais vous devez également créer une valeur sous cette clé pour activer/désactiver l'assembly. Voici les détails concernant la valeur à créer :

  • Nom de la valeur : APTCA_FLAG.

  • Type valeur : REG_DWORD.

  • Données de la valeur : 1 pour désactiver ; 0 pour activer.

Les éditeurs d'un assembly devant être désactivé de cette façon pour les applications clientes d'un niveau de confiance partiel peuvent écrire un correctif pour créer une clé de Registre et les données de la valeur pour l'assembly.

Remarque :

Les principaux assemblys du .NET Framework ne sont pas affectés par cette méthode de désactivation, puisqu'ils sont requis pour l'exécution des applications managées. Le support technique pour la désactivation des assemblys APTCA est essentiellement destiné aux tiers et aux applications autres que le .NET Framework.

Sandboxing des fichiers XAML libres externes

Les fichiers XAML libres sont des fichiers .xaml de balisage uniquement qui ne peuvent pas être identifiés par un URI à en-tête pack (consultez URI à en-tête pack dans Windows Presentation Foundation). Cela signifie qu'ils ne correspondent pas à des fichiers de ressource, de contenu ni de site d'origines (consultez Fichiers de ressources, de contenu et de données d'une application Windows Presentation Foundation).

Lorsque Internet Explorer accède directement à des fichiers XAML libres, ces derniers sont chargés dans un bac à sable (sandbox) de sécurité par le jeu d'autorisations par défaut de la zone Internet.

Cependant, le comportement de sécurité est différent lorsqu'un NavigationWindow ou un Frame dans une application autonome accède à ces fichiers XAML libres.

Dans les deux cas, le fichier XAML libre hérite des autorisations de son application hôte. Du point de vue de la sécurité, ce comportement peut toutefois être indésirable, en particulier si le fichier XAML libre a été généré par une entité inconnue ou non fiable. Ce type de contenu est considéré comme du contenu externe et vous pouvez configurer Frame et NavigationWindow pour qu'ils l'isolent. Pour procéder à cette isolation, la propriété SandboxExternalContent doit avoir la valeur true, comme indiqué dans les exemples suivants pour Frame et NavigationWindow :

<Frame 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</Frame>
<!-- Sandboxing external content using NavigationWindow-->
<NavigationWindow 
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</NavigationWindow>

Lorsque ce paramètre est sélectionné, le contenu externe sera chargé dans un processus distinct de celui qui héberge l'application. Ce processus est limité au jeu d'autorisations par défaut de la zone Internet, ce qui permet une isolation efficace de l'application d'hébergement et l'ordinateur client.

Meilleures pratiques pour développer des applications WPF sécurisées

La génération d'applications WPF sécurisées nécessite la mise en place des meilleures pratiques concernant :

Voir aussi

Concepts

Sécurité de confiance partielle 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é

Vue d'ensemble du déploiement ClickOnce

Vue d'ensemble du langage XAML

Autres ressources

Patterns and Practices Security Guidance for Applications

Sécurité d'accès du code