Sécurité (WPF)
Lors du développement d’applications autonomes et hébergées par 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 permissions sans restriction (CAS, jeu d'autorisations FullTrust), qu'elles soient déployées à l'aide de Windows Installer (.msi), XCopy ou ClickOnce. Le déploiement d’applications WPF autonomes à confiance partielle avec ClickOnce n’est pas pris en charge. Toutefois, une application hôte avec une confiance totale peut créer une AppDomain de confiance partielle à l'aide du modèle de complément de .NET Framework. Pour plus d'informations, consultez WPF Add-Ins vue d'ensemble.
Les applications WPF hébergées par un navigateur sont accueillies par Windows Internet Explorer ou Firefox et peuvent être des applications de navigateur XAML (XBAPs) ou des documents XAML autonomes. Pour plus d'informations, consultez Vue d'ensemble des applications de navigateur XAML WPF.
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équentes sur les applications hébergées par un navigateur WPF (XBAP).
Les applications hébergées par le navigateur WPF s’exécutent dans un bac à sable de sécurité d’approbation partielle, par défaut, qui est limité au système d’autorisation cas par défautInternet zone définie. 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. Un XBAP peut élever des privilèges, jusqu’à confiance totale, en fonction de la zone de sécurité de l’URL de déploiement et de la configuration de sécurité du client. Pour plus d’informations, consultez Sécurité de confiance partielle dans 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 :
Désactivation des assemblages APTCA pour les applications clientes partiellement approuvées
comportement de bac à sable pour les fichiers XAML libres
ressources pour le développement d’applications WPF qui favorisent la sécurité
Navigation sécurisée
Pour les XBAPs, WPF distingue deux types de navigation : l’application et le navigateur.
navigation d’application est la navigation entre des éléments de contenu au sein d’une application hébergée par un navigateur. La navigation du navigateur web est la navigation qui modifie le contenu et l'URL d’un navigateur lui-même. La relation entre la navigation d’application (généralement XAML) et la navigation dans le navigateur (généralement HTML) est illustrée dans l’illustration suivante :
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 des applications
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 Resource. | pack://application:,,,/MyResourceFile.xaml |
Contenu | Fichiers ajoutés à un projet ayant un type de build de Contenu. | pack://application:,,,/MyContentFile.xaml |
Site d’origine | Fichiers ajoutés à un projet avec un type de build de Aucun. | pack://siteoforigin:,,,/MySiteOfOriginFile.xaml |
Code d’application | Ressources XAML qui ont un code-behind compilé. -ou- Fichiers XAML ajoutés à un projet avec un type de build de Page. |
pack://application:,,,/MyResourceFile .xaml |
Note
Pour plus d’informations sur les fichiers de données d’application et les URI de pack, consultez ressource d’application WPF, contenu et fichiers de données.
Les fichiers de ces types de contenu peuvent être accédés par l’utilisateur ou par programmation :
Navigation utilisateur. L’utilisateur navigue en cliquant sur un élément Hyperlink.
Navigation par programmation . L’application navigue sans impliquer l’utilisateur, par exemple en définissant la propriété NavigationWindow.Source.
Sécurité de navigation dans le navigateur
La navigation dans le navigateur est considérée comme sécurisée uniquement dans les conditions suivantes :
Navigation de l'utilisateur. L’utilisateur navigue en cliquant sur un élément Hyperlink qui se trouve dans la NavigationWindowprincipale, et non dans un Frameimbriqué.
zone. Le contenu accessible se trouve sur Internet ou sur l’intranet local.
Protocol. Le protocole utilisé est soit http, https, fichier, soit mailto.
Si un XBAP tente d’accéder au contenu d’une manière qui ne respecte pas ces conditions, une SecurityException est lancée.
Paramètres de sécurité logicielle 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. Le logiciel de navigation web inclut n’importe quelle application ou composant qui utilise le WinINet
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
Contrôles et plug-ins ActiveX
Téléchargements
Scriptage
Authentification utilisateur
La collection de fonctionnalités qui peuvent être sécurisées de cette façon est configurée par zone pour lesInternet
Ouvrez panneau de configuration.
Cliquez sur Réseau et Internet, puis sur Options Internet.
La boîte de dialogue Options Internet s’affiche.
Sous l’onglet Sécurité, sélectionnez la zone pour laquelle configurer les paramètres de sécurité.
Cliquez sur le bouton Niveau personnalisé .
La boîte de dialogue Paramètres de sécurité s’affiche et vous pouvez configurer les paramètres de sécurité de la zone sélectionnée.
Note
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 non structuré. Détermine si Internet Explorer peut accéder aux fichiers XAML non compilés. (Activer, désactiver et inviter des options).
applications de navigateur XAML. Paramètre si Internet Explorer peut naviguer vers et exécuter des applications XBAP. (Activer, désactiver et inviter des options).
Par défaut, ces paramètres sont tous activés pour les zones Internet, intranet localet sites approuvés, et désactivés pour la zone sites restreints.
Paramètres du Registre WPF liés à la sécurité
Outre les paramètres de sécurité disponibles via Les options Internet, les valeurs de Registre suivantes sont disponibles pour bloquer sélectivement un certain nombre de fonctionnalités WPF sensibles à la sécurité. Les valeurs sont définies sous la clé suivante :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features
Le tableau suivant répertorie les valeurs qui peuvent être définies.
Nom de la valeur | Type de valeur | Données de valeur |
---|---|---|
XBAPDisallow | REG_DWORD | 1 pour interdire ; 0 à autoriser. |
LooseXamlDisallow | REG_DWORD | 1 pour interdire ; 0 à autoriser. |
WebBrowserDisallow | REG_DWORD | 1 pour interdire ; 0 à autoriser. |
MediaAudioDisallow | REG_DWORD | 1 pour interdire ; 0 à autoriser. |
MediaImageDisallow | REG_DWORD | 1 pour interdire ; 0 à autoriser. |
MédiaVidéoInterdire | REG_DWORD | 1 pour interdire ; 0 à autoriser. |
ScriptInteropDisallow | REG_DWORD | 1 pour interdire ; 0 à autoriser. |
Contrôle WebBrowser et contrôles de fonctionnalité
Le contrôle WebBrowser WPF 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 WebBrowser WPF pour héberger du contenu web non approuvé. Toutefois, certaines fonctionnalités de sécurité doivent être appliquées directement par les applications à l’aide du contrôle WebBrowser. Pour plus d’informations sur le contrôle ActiveX WebBrowser, consultez Vue d’ensemble du contrôle WebBrowser et tutoriels.
Note
Cette section s’applique également au contrôle Frame, car il utilise le WebBrowser pour accéder au contenu HTML.
Si le contrôle WebBrowser WPF est utilisé pour héberger du contenu web non approuvé, votre application doit utiliser une AppDomain de confiance 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 méthode InvokeScript et de la propriété ObjectForScripting. Pour plus d’informations, consultez WPF Add-Ins Vue d'ensemble.
Si votre application utilise le contrôle WebBrowser WPF, 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. Les contrôles de fonctionnalité peuvent être configurés à l’aide de la fonction CoInternetSetFeatureEnabled ou en modifiant des valeurs dans le Registre. Pour plus d’informations sur les contrôles de fonctionnalités, consultez Présentation des contrôles de fonctionnalités et contrôles de fonctionnalités Internet.
Si vous développez une application WPF autonome qui utilise le contrôle WebBrowser WPF, WPF active automatiquement les contrôles de fonctionnalités suivants pour votre application.
Contrôle des fonctionnalités |
---|
FONCTIONNALITÉ_MIME_HANDLING |
FEATURE_MIME_SNIFFING |
FONCTIONNALITÉ_MISE_EN_CACHE_D'OBJETS |
FEATURE_SAFE_BINDTOOBJECT |
RESTRICTIONS_SUR_FENÊTRE_FEATURE |
ÉLÉVATION_ZONE_CARACTÉRISTIQUE |
FONCTION_RESTRICTION_TÉLÉCHARGEMENT_FICHIER |
FEATURE_RESTRICT_ACTIVEXINSTALL (Restriction de l'installation d'ActiveX) |
GESTION_DES_ADDONS |
FONCTIONNALITÉ_DÉSACTIVER_NOM_UTILISATEUR_MOT_DE_PASSE_HTTP |
BANDESÉCURITÉ |
FEATURE_UNC_SAVEDFILECHECK |
FEATURE_VALIDATE_NAVIGATE_URL |
FONCTION_DESACTIVATION_PROTOCOLE_TELNET |
FEATURE_WEBOC_POPUPMANAGEMENT |
FEATURE_DISABLE_LEGACY_COMPRESSION |
FEATURE_SSLUX |
Étant donné que ces contrôles de fonctionnalité sont activés sans condition, une application de confiance totale peut être altérée par ces contrôles. Dans ce cas, s’il n’existe aucun risque de sécurité pour l’application spécifique et le contenu qu’il héberge, le contrôle de fonctionnalité correspondant peut être désactivé.
Les contrôles de fonctionnalité sont appliqués par le processus instanciant l’objet ActiveX WebBrowser. Par conséquent, si vous créez une application autonome qui peut accéder à du contenu non approuvé, vous devez envisager sérieusement d’activer des contrôles de fonctionnalités supplémentaires.
Note
Cette recommandation est basée sur des recommandations générales pour la sécurité de l’hôte MSHTML et SHDOCVW. Pour plus d’informations, consultez FAQ sur la sécurité de l’hôte MSHTML : Partie I de II et FAQ sur la sécurité de l’hôte MSHTML : Partie II de II.
Pour votre exécutable, envisagez d’activer les contrôles de fonctionnalité suivants en définissant la valeur de Registre sur 1.
Gestion des fonctionnalités |
---|
FEATURE_ACTIVEX_REPURPOSEDETECTION |
FEATURE_BLOCK_LMZ_IMG |
FEATURE_BLOCK_LMZ_OBJECT |
FEATURE_BLOCK_LMZ_SCRIPT |
CARACTÉRISTIQUE_LIMITER_RÉSÀ_LMZ |
FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7 |
AFFICHER_DIALOGUE_AVERTISSEMENT_PROTOCOLLE_APPLICATION |
FEATURE_LOCALMACHINE_LOCKDOWN |
FEATURE_FORCE_ADDR_AND_STATUS |
FONCTIONNALITÉ_ZONE_RESTREINTE_LORSQUE_FICHIER_INTROUVABLE |
Pour votre exécutable, envisagez de désactiver la fonction de contrôle suivante en définissant la valeur du registre sur 0.
Gestion des fonctionnalités |
---|
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 XBAPs s’exécutant dans Internet Explorer obtiennent également 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 Understanding and Working in Protected Mode Internet Explorer.
Note
Si vous essayez d’exécuter un XBAP qui inclut un contrôle WebBrowser WPF dans Firefox, lorsque vous êtes dans la zone Internet, une SecurityException sera levée. Cela est dû à la stratégie de sécurité WPF.
Désactivation des assemblys APTCA pour les applications clientes partiellement approuvées
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. Étant donné qu’elles sont entièrement approuvées, seules les applications clientes gérées entièrement approuvées peuvent les utiliser. Pour permettre aux applications partiellement approuvées de les utiliser, elles doivent être marquées avec le AllowPartiallyTrustedCallersAttribute (APTCA). Seuls les assemblies qui ont été testés pour garantir leur sécurité lors de l'exécution en 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. Une fois qu’une faille de sécurité est détectée, les éditeurs d’assembly peuvent produire une mise à jour de sécurité pour résoudre le problème sur les installations existantes et pour vous protéger contre les installations qui peuvent se produire après la découverte du problème. L’une des options de la mise à jour consiste à désinstaller l’assembly, bien que cela puisse interrompre d’autres applications clientes entièrement approuvées 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>
Voici un exemple :
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'assemblage 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 les applications clientes partiellement approuvées, vous pouvez écrire une mise à jour qui crée la clé et la valeur de Registre.
Note
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 assemblies APTCA est principalement destinée aux applications tierces.
Comportement du bac à sable pour les fichiers XAML libres
Les fichiers XAML libres sont des fichiers XAML composés uniquement de balisage qui ne dépendent pas d'un code-behind, d'un gestionnaire d'événements ou d'un assembly propre à l'application. Lorsque des fichiers XAML non empaquetés sont ouverts directement à partir du navigateur, ils sont chargés dans un environnement sécurisé de type sandbox en fonction du jeu d’autorisations de la zone Internet par défaut.
Toutefois, le comportement de sécurité est différent lorsqu'on navigue vers des fichiers XAML non compilés à partir de 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 connu sous le nom de contenu externe , et Frame et NavigationWindow peuvent être configurés pour l'isoler lorsqu'on y accède par navigation. L’isolation est obtenue en définissant la propriété sandboxExternalContent
<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ètre, le contenu externe est chargé dans un processus distinct du processus qui héberge l’application. Ce processus est limité au jeu d’autorisations de la zone Internet par défaut, ce qui l’isole efficacement de l’application d’hébergement et de l’ordinateur client.
Note
Même si la navigation vers des fichiers XAML libres à partir d’une NavigationWindow ou d’un Frame dans une 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). Cela est dû au fait qu’une application WPF autonome utilisant un navigateur Web ne fournit pas la fonctionnalité de sécurité en mode protégé supplémentaire d’Internet Explorer.
Ressources pour le développement d’applications WPF qui favorisent la sécurité
Voici quelques ressources supplémentaires pour aider à développer des applications WPF qui favorisent la sécurité :
Aire | Ressource |
---|---|
Code managé | Modèles et pratiques de sécurité pour les applications |
CAS | sécurité d’accès au code |
ClickOnce | ClickOnce sécurité et déploiement |
WPF | Sécurité en Confiance Partielle WPF |
Voir aussi
- Sécurité de confiance partielle WPF
- Stratégie de sécurité WPF - Sécurité de la plateforme
- La stratégie de sécurité WPF - Ingénierie de la sécurité
- Conseils de sécurité sur les modèles et pratiques pour les applications
- sécurité d’accès au code
- de sécurité et de déploiement ClickOnce
- XAML dans WPF
.NET Desktop feedback