Sécurité (WPF)

Lors du développement d’applications autonomes et hébergées par un navigateur Windows Presentation Foundation (WPF), vous devez prendre en compte le modèle de sécurité. Les applications autonomes WPF s’exécutent avec des autorisations illimitées (jeu d’autorisations CASFullTrust ), qu’elles soient déployées à l’aide de Windows Installer (.msi), XCopy ou ClickOnce. Le déploiement d’applications WPF autonomes de confiance partielle avec ClickOnce n’est pas pris en charge. Toutefois, une application hôte à confiance totale peut créer une approbation AppDomain partielle à l’aide du modèle de complément .NET Framework. Pour plus d’informations, consultez Vue d’ensemble des compléments WPF.

Les applications hébergées par un navigateur WPF sont hébergées par Windows Internet Explorer ou Firefox, et peuvent être des applications de navigateur XAML (XBAPs) ou des documents XAML extensibles (XAML) pour plus d’informations, voir Vue d’ensemble des applications de navigateur XAML WPF.

Avertissement

Les XBAPs nécessitent que les navigateurs hérités fonctionnent, tels qu’Internet Explorer et Firefox. Ces versions de navigateur plus anciennes ne sont généralement pas prises 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.

Par défaut, les applications hébergées par le navigateur WPF s’exécutent dans un bac à sable de sécurité de confiance partielle, qui est limité au jeu d’autorisations de zone Internet CASpar défaut. Cela isole efficacement les applications hébergées par le navigateur WPF à partir de l’ordinateur client de la même façon que vous vous attendiez à ce que les applications web classiques soient isolées. Une application XBAP peut élever des privilèges jusqu’à la confiance totale, selon la zone de sécurité de l’URL de déploiement et la configuration de sécurité du client. Pour plus d’informations, consultez Sécurité de confiance partielle de WPF.

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

Cette rubrique contient les sections suivantes :

Sécurité de la navigation

Pour les XBAPs, WPF distingue deux types de navigation : l’application et le navigateur.

La navigation dans une application est la navigation entre les éléments de contenu dans une application hébergée par un navigateur. La navigation dans un navigateur est la navigation qui modifie l’URL de contenu et d’emplacement d’un navigateur lui-même. La relation entre la navigation dans l’application (en général XAML) et la navigation dans un navigateur (en général HTML) est illustrée ci-dessous :

Relationship between application navigation and browser navigation.

Le type de contenu considéré comme sécurisé pour un XBAP à naviguer est principalement déterminé par l’utilisation de la navigation dans l’application ou du navigateur.

Sécurité de la navigation dans une application

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

Type de contenu Description Exemple d’URI
Ressource Fichiers ajoutés à un projet avec un type de build Ressource. pack://application:,,,/MyResourceFile.xaml
Contenu Fichiers ajoutés à un projet avec un type de build Contenu. pack://application:,,,/MyContentFile.xaml
Site d’origine Fichiers ajoutés à un projet avec un type de build Aucun. pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
Code d’application Ressources XAML avec un code-behind compilé.

-ou-

Fichiers XAML ajoutés à un projet avec un type de build Page.
pack://application:,,,/MyResourceFile .xaml

Remarque

Pour plus d’informations sur les fichiers de données d’application et les URI de pack, consultez la ressource d’application WPF, le contenu et les fichiers de données.

Les fichiers ayant ces types de contenu sont accessibles par l’utilisateur et par programme :

  • Navigation utilisateur. L’utilisateur navigue en cliquant sur un Hyperlink élément.

  • Navigation par programme. L’application navigue sans impliquer l’utilisateur, par exemple en définissant la NavigationWindow.Source propriété.

Sécurité de la navigation dans un navigateur

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

  • Navigation utilisateur. L’utilisateur navigue en cliquant sur un Hyperlink élément qui se trouve dans le principal NavigationWindow, et non dans un imbrication Frame.

  • Zone. Le contenu cible de la navigation se trouve sur Internet ou sur l’intranet local.

  • Protocole. Le protocole utilisé est http, https, fichier ou mailto.

Si un XBAP tente d’accéder au contenu d’une manière qui ne respecte pas ces conditions, une SecurityException opération est levée.

Paramètres de sécurité des logiciels de navigation web

Les paramètres de sécurité de votre ordinateur déterminent l’accès accordé à n’importe quel logiciel de navigation web. Les logiciels de navigation web incluent tout composant ou application utilisant les API WinINet ou UrlMon, y compris Internet Explorer et PresentationHost.exe.

Internet Explorer fournit un mécanisme par lequel vous pouvez configurer les fonctionnalités autorisées à être exécutées par ou à partir d’Internet Explorer, y compris les éléments suivants :

  • Composants dépendants du .NET Framework

  • Plug-ins et contrôles ActiveX

  • Téléchargements

  • Scripts

  • Authentification des utilisateurs

L’ensemble de fonctionnalités pouvant être sécurisées de cette façon est configuré par zone, et ce, pour les zones Internet, Intranet, Sites approuvés et Sites sensibles. Les étapes suivantes décrivent comment configurer vos paramètres de sécurité :

  1. Ouvrez le Panneau de configuration.

  2. Cliquez sur Réseau et Internet, puis sur Options Internet.

    La boîte de dialogue Options Internet s’affiche.

  3. Dans l’onglet Sécurité, sélectionnez la zone pour laquelle configurer les paramètres de sécurité.

  4. Cliquez sur le bouton Personnaliser le niveau.

    La boîte de dialogue Paramètres de sécurité s’affiche. Vous pouvez y configurer les paramètres de sécurité de la zone sélectionnée.

    Screenshot that shows the Security Settings dialog box.

Remarque

Vous pouvez également accéder à la boîte de dialogue Options Internet à partir d’Internet Explorer. Cliquez sur Outils, puis sur Options Internet.

À compter de Windows Internet Explorer 7, les paramètres de sécurité suivants pour .NET Framework sont inclus :

  • XAML libre. Contrôle si Internet Explorer peut accéder à des fichiers XAML et lâches. (Options Activer, Désactiver et Demander).

  • Applications du navigateur XAML. Contrôle si Internet Explorer peut accéder aux adresses XBAP et les exécuter. (Options Activer, Désactiver et Demander).

Par défaut, ces paramètres sont tous activés pour les zones Internet, Intranet Local et Sites approuvés et désactivés pour la zone Sites sensibles.

Outre les paramètres de sécurité disponibles avec les options Internet, les valeurs de Registre suivantes sont disponibles pour le blocage sélectif de certaines fonctionnalités WPF liées à la sécurité. Les valeurs sont définies sous la clé suivante :

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

Le tableau ci-dessous répertorie les valeurs qui peuvent être définies.

Nom de la valeur Type de valeur Données de la valeur
XBAPDisallow REG_DWORD 1 pour interdire ; 0 pour autoriser.
LooseXamlDisallow REG_DWORD 1 pour interdire ; 0 pour autoriser.
WebBrowserDisallow REG_DWORD 1 pour interdire ; 0 pour autoriser.
MediaAudioDisallow REG_DWORD 1 pour interdire ; 0 pour autoriser.
MediaImageDisallow REG_DWORD 1 pour interdire ; 0 pour autoriser.
MediaVideoDisallow REG_DWORD 1 pour interdire ; 0 pour autoriser.
ScriptInteropDisallow REG_DWORD 1 pour interdire ; 0 pour autoriser.

Contrôle WebBrowser et contrôles de fonctionnalités

Le contrôle WPF WebBrowser peut être utilisé pour héberger du contenu web. Le contrôle WPF WebBrowser encapsule le contrôle ActiveX WebBrowser sous-jacent. WPF fournit une prise en charge de la sécurisation de votre application lorsque vous utilisez le contrôle WPF WebBrowser pour héberger du contenu web non approuvé. Toutefois, certaines fonctionnalités de sécurité doivent être appliquées directement par les applications utilisant le WebBrowser contrôle. Pour plus d’informations sur le contrôle ActiveX WebBrowser, consultez WebBrowser Control Overviews and Tutorials (Vues d’ensemble et didacticiels pour le contrôle WebBrowser).

Remarque

Cette section s’applique également au Frame contrôle, car il utilise le WebBrowser contenu HTML.

Si le contrôle WPF WebBrowser est utilisé pour héberger du contenu web non approuvé, votre application doit utiliser une approbation AppDomain partielle pour aider à isoler le code de votre application contre le code de script HTML potentiellement malveillant. Cela est particulièrement vrai si votre application interagit avec le script hébergé à l’aide de la InvokeScript méthode et de la ObjectForScripting propriété. Pour plus d’informations, consultez Vue d’ensemble des compléments WPF.

Si votre application utilise le contrôle WPF WebBrowser , une autre façon d’augmenter la sécurité et d’atténuer les attaques consiste à activer les contrôles de fonctionnalités Internet Explorer. Les contrôles de fonctionnalités sont des ajouts à Internet Explorer qui permettent aux administrateurs et aux développeurs de configurer des fonctionnalités d’Internet Explorer et d’applications qui hébergent le contrôle ActiveX WebBrowser, que le contrôle WPF WebBrowser encapsule. Vous pouvez configurer les contrôles de fonctionnalités à l’aide de la fonction CoInternetSetFeatureEnabled ou en modifiant les valeurs dans le Registre. Pour plus d’informations sur les contrôles de fonctionnalités, consultez Introduction to Feature Controls (Présentation des contrôles de fonctionnalités) et Internet Feature Controls (Contrôles de fonctionnalités Internet).

Si vous développez une application WPF autonome qui utilise le contrôle WPF, WPF WebBrowser active automatiquement les contrôles de fonctionnalités suivants pour votre application.

Contrôle de fonctionnalité
FEATURE_MIME_HANDLING
FEATURE_MIME_SNIFFING
FEATURE_OBJECT_CACHING
FEATURE_SAFE_BINDTOOBJECT
FEATURE_WINDOW_RESTRICTIONS
FEATURE_ZONE_ELEVATION
FEATURE_RESTRICT_FILEDOWNLOAD
FEATURE_RESTRICT_ACTIVEXINSTALL
FEATURE_ADDON_MANAGEMENT
FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
FEATURE_SECURITYBAND
FEATURE_UNC_SAVEDFILECHECK
FEATURE_VALIDATE_NAVIGATE_URL
FEATURE_DISABLE_TELNET_PROTOCOL
FEATURE_WEBOC_POPUPMANAGEMENT
FEATURE_DISABLE_LEGACY_COMPRESSION
FEATURE_SSLUX

Étant donné que ces contrôles de fonctionnalités sont activés sans condition, ils peuvent perturber une application de confiance totale. Dans ce cas, s’il n’existe aucun risque de sécurité pour l’application spécifique et le contenu qu’elle héberge, le contrôle de fonctionnalité correspondant peut être désactivé.

Les contrôles de fonctionnalités sont appliqués par le processus d’instanciation de l’objet ActiveX WebBrowser. Par conséquent, si vous créez une application autonome qui peut accéder à un contenu non approuvé, vous devez sérieusement envisager d’activer des contrôles de fonctionnalités supplémentaires.

Remarque

Cette recommandation est basée sur les recommandations générales sur la sécurité des hôtes MSHTML et SHDOCVW. Pour plus d’informations, consultez The MSHTML Host Security FAQ: Part I of II (FAQ sur la sécurité de l’hôte MSHTML : partie I sur II) et The MSHTML Host Security FAQ: Part II of II (FAQ sur la sécurité de l’hôte de MSHTML : partie II sur II).

Pour votre fichier exécutable, envisagez d’activer les contrôles de fonctionnalités suivants en définissant la valeur de Registre sur 1.

Contrôle de fonctionnalité
FEATURE_ACTIVEX_REPURPOSEDETECTION
FEATURE_BLOCK_LMZ_IMG
FEATURE_BLOCK_LMZ_OBJECT
FEATURE_BLOCK_LMZ_SCRIPT
FEATURE_RESTRICT_RES_TO_LMZ
FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7
FEATURE_SHOW_APP_PROTOCOL_WARN_DIALOG
FEATURE_LOCALMACHINE_LOCKDOWN
FEATURE_FORCE_ADDR_AND_STATUS
FEATURE_RESTRICTED_ZONE_WHEN_FILE_NOT_FOUND

Pour votre fichier exécutable, envisagez de désactiver le contrôle de fonctionnalité suivant en définissant la valeur de Registre sur 0.

Contrôle de fonctionnalité
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

Si vous exécutez une application de navigateur XAML de confiance partielle (XBAP) qui inclut un contrôle WPF WebBrowser dans Windows Internet Explorer, WPF héberge le contrôle ActiveX WebBrowser dans l’espace d’adressage du processus Internet Explorer. Étant donné que le contrôle ActiveX WebBrowser est hébergé dans le processus Internet Explorer, tous les contrôles de fonctionnalités pour Internet Explorer sont également activés pour le contrôle ActiveX WebBrowser.

Les applications XBAP exécutées dans Internet Explorer bénéficient également d’un niveau de sécurité supplémentaire par rapport aux applications autonomes normales. Cette sécurité supplémentaire est due au fait qu’Internet Explorer, et par conséquent, le contrôle ActiveX WebBrowser s’exécute en mode protégé par défaut sur Windows Vista et Windows 7. Pour plus d’informations sur le mode protégé, consultez Comprendre et travailler sous le mode protégé d’Internet Explorer.

Remarque

Si vous essayez d’exécuter un XBAP qui inclut un contrôle WPF WebBrowser dans Firefox, tandis que dans la zone Internet, une SecurityException est levée. conformément à la stratégie de sécurité de WPF.

Désactivation des assemblys APTCA pour les applications clientes partiellement fiables

Lorsque des assemblys managés sont installés dans le Global Assembly Cache (GAC), ils deviennent entièrement approuvés, car l’utilisateur doit fournir une autorisation explicite pour les installer. Dans la mesure où ils sont entièrement fiables, seules les applications clientes managées entièrement fiables peuvent les utiliser. Pour permettre aux applications partiellement approuvées de les utiliser, elles doivent être marquées avec le AllowPartiallyTrustedCallersAttribute (APTCA). Seuls les assemblys dont la sécurité d’exécution a été testée pour une confiance partielle doivent être marqués avec cet attribut.

Toutefois, il est possible qu’un assembly APTCA présente une faille de sécurité après avoir été installé dans le GAC. Lorsqu’une faille de sécurité est découverte, les éditeurs d’assembly peuvent produire une mise à jour de sécurité pour résoudre le problème sur les installations existantes et pour assurer une protection vis-à-vis des installations effectuées après la détection du problème. Pour la mise à jour, une option consiste à désinstaller l’assembly, bien que cela risque de bloquer d’autres applications clientes entièrement fiables qui utilisent l’assembly.

WPF fournit un mécanisme par lequel un assembly APTCA peut être désactivé pour les XBAPs partiellement approuvés sans désinstaller l’assembly APTCA.

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

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

Un exemple est fourni ci-après :

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

Cette clé établit une entrée pour l’assembly APTCA. Vous devez également créer une valeur dans cette clé, qui active ou désactive l’assembly. Voici les détails de la valeur :

  • Nom de la valeur : APTCA_FLAG.

  • Type de valeur : REG_DWORD.

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

Si un assembly doit être désactivé pour des applications clientes partiellement fiables, vous pouvez écrire une mise à jour qui crée la clé de Registre et la valeur.

Remarque

Les assemblys .NET Framework core ne sont pas affectés en les désactivant de cette façon, car ils sont nécessaires pour que les applications managées s’exécutent. La prise en charge de la désactivation des assemblys APTCA est principalement destinée aux applications tierces.

Comportement de bac à sable pour les fichiers en XAML libre

Les fichiers XAML libres sont des fichiers XAML de balisage uniquement qui ne dépendent pas d’un assembly code-behind, d’un gestionnaire d’événements ou d’un assembly spécifique à l’application. Lorsque des fichiers XAML libres sont accessibles directement à partir du navigateur, ils sont chargés dans un bac à sable de sécurité en fonction du jeu d’autorisations de zone Internet par défaut.

Toutefois, le comportement de sécurité est différent lorsque des fichiers XAML libres sont accédés à partir d’une NavigationWindow ou Frame dans une application autonome.

Dans les deux cas, le fichier XAML libre qui est parcouru hérite des autorisations de son application hôte. Toutefois, ce comportement peut être indésirable du point de vue de la sécurité, en particulier si un fichier XAML libre a été produit par une entité qui n’est pas approuvée ou inconnue. Ce type de contenu est appelé contenu externe et FrameNavigationWindow peut être configuré pour l’isoler lorsqu’il est accédé. L’isolation est obtenue en définissant la propriété SandboxExternalContent sur true, comme illustré dans les exemples suivants pour Frame et NavigationWindow:

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

Avec ce paramétrage, le contenu externe sera chargé dans un processus distinct du processus qui héberge l’application. Ce processus, limité au jeu d’autorisations de la zone Internet par défaut, l’isole efficacement de l’application d’hébergement et de l’ordinateur client.

Remarque

Même si la navigation vers des fichiers XAML libres à partir d’une application autonome ou Frame d’une NavigationWindow application autonome est implémentée en fonction de l’infrastructure d’hébergement du navigateur WPF, impliquant le processus PresentationHost, le niveau de sécurité est légèrement inférieur au moment où le contenu est chargé directement dans Internet Explorer sur Windows Vista et Windows 7 (qui serait toujours via PresentationHost). En effet, une application WPF autonome utilisant un navigateur web ne fournit pas la fonctionnalité de sécurité supplémentaire du mode protégé d’Internet Explorer.

Ressources pour le développement d’applications WPF promouvant la sécurité

Voici quelques ressources supplémentaires pour aider à développer des applications WPF qui favorisent la sécurité :

Zone Ressource
Code managé Index des directives, conseils et procédures de sécurité pour les applications
Site d’administration centrale Sécurité d’accès du code
ClickOnce Sécurité et déploiement ClickOnce
WPF Sécurité de confiance partielle de WPF

Voir aussi