Considérations supplémentaires sur la sécurité des Windows Forms

Les paramètres de sécurité .NET Framework peuvent entraîner l’exécution de votre application différemment dans un environnement d’approbation partielle que sur votre ordinateur local. Le .NET Framework limite l’accès à des ressources locales critiques telles que le système de fichiers, le réseau et les API non managées, entre autres. Les paramètres de sécurité affectent la possibilité d’appeler l’API Microsoft Windows ou d’autres API qui ne peuvent pas être vérifiées par le système de sécurité. La sécurité affecte également les autres aspects de votre application, y compris l’accès aux fichiers et aux données, ainsi que l’impression. Pour plus d’informations sur l’accès aux fichiers et aux données dans un environnement à confiance partielle, consultez Accès plus sécurisé aux fichiers et aux données dans les Windows Forms. Pour plus d’informations sur l’impression dans un environnement à confiance partielle, consultez Impression plus sécurisée dans les Windows Forms.

Les sections suivantes expliquent comment utiliser le Presse-papiers, effectuer une manipulation de fenêtre et appeler l’API Windows à partir d’applications qui s’exécutent dans un environnement d’approbation partielle.

Accès au presse-papiers

La UIPermission classe contrôle l’accès au Presse-papiers, et la valeur d’énumération associée UIPermissionClipboard indique le niveau d’accès. Le tableau suivant présente les différents niveaux d’autorisation.

Valeur UIPermissionClipboard Description
AllClipboard Le Presse-papiers peut être utilisé sans aucune restriction.
OwnClipboard Le Presse-papiers peut être utilisé avec certaines restrictions. La possibilité de placer des données dans le Presse-papiers (opérations de commande copier ou couper) n’est pas restreinte. Les contrôles intrinsèques qui acceptent le collage, comme les zones de texte, peuvent accepter les données du Presse-papiers, mais les contrôles utilisateur ne peuvent pas lire le contenu du Presse-papiers par programme.
NoClipboard Impossible d’utiliser le Presse-papiers.

Par défaut, la zone Intranet local reçoit AllClipboard l’accès et la zone Internet reçoit OwnClipboard l’accès. Cela signifie que l’application peut copier des données dans le Presse-papiers, mais pas les coller par programme vers ou lire à partir du Presse-papiers. Ces restrictions empêchent les programmes sans confiance totale de lire les données copiées dans le Presse-papiers par une autre application. Si votre application nécessite l’accès total au Presse-papiers mais que vous n’avez pas les autorisations, vous devez élever les autorisations pour votre application. Pour plus d’informations sur l’élévation d’autorisations, consultez Administration de la stratégie de sécurité générale.

Manipulation de fenêtres

La UIPermission classe contrôle également l’autorisation d’effectuer une manipulation de fenêtre et d’autres actions liées à l’interface utilisateur, et la valeur d’énumération associée UIPermissionWindow indique le niveau d’accès. Le tableau suivant présente les différents niveaux d’autorisation.

Par défaut, la zone Intranet local reçoit AllWindows l’accès et la zone Internet reçoit SafeTopLevelWindows l’accès. Cela signifie que dans la zone Internet, l’application peut effectuer la plupart des actions d’interface utilisateur et liées aux fenêtres, mais l’aspect de la fenêtre sera modifié. La fenêtre modifiée affiche une bulle de notification lors du démarrage de l’exécution, contient le texte de barre de titre modifié et requiert un bouton Fermer dans la barre de titre. La bulle de notification et la barre de titre indiquent à l’utilisateur de l’application que l’application s’exécute en confiance partielle.

Valeur UIPermissionWindow Description
AllWindows Les utilisateurs peuvent utiliser toutes les fenêtres et tous les événements d'entrée d'utilisateur sans restriction.
SafeTopLevelWindows Les utilisateurs peuvent utiliser uniquement des fenêtres de niveau supérieur sûres et des sous-fenêtres sûres pour le dessin, et peuvent utiliser uniquement les événements d’entrée d’utilisateur pour l’interface utilisateur dans ces fenêtres de niveau supérieur et ces sous-fenêtres. Ces fenêtres sûres sont clairement indiquées et ont des restrictions de taille minimale et maximale. Les restrictions empêchent les attaques d’usurpation potentiellement dangereuses, telles que l’imitation des écrans d’ouverture de session système ou le bureau système, et limitent l’accès par programmation aux fenêtres parentes, aux API liées au focus et à l’utilisation ToolTip du contrôle,
SafeSubWindows Les utilisateurs peuvent utiliser uniquement des sous-fenêtres sûres pour le dessin, et peuvent utiliser uniquement les événements d’entrée d’utilisateur pour l’interface utilisateur dans ces sous-fenêtres. Un contrôle affiché dans un navigateur est un exemple de sous-fenêtre sûre.
NoWindows Les utilisateurs ne peuvent pas utiliser d’événements d’interface utilisateur ou Windows. Aucune interface utilisateur ne peut être utilisée.

Chaque niveau d’autorisation identifié par l’énumération UIPermissionWindow autorise moins d’actions que le niveau supérieur à celui-ci. Les tableaux suivants indiquent les actions qui sont limitées par les valeurs et SafeSubWindows les SafeTopLevelWindows valeurs. Pour plus d'informations sur les autorisations nécessaires pour chaque membre, consultez la rubrique de référence correspondant à ce membre dans la documentation de la bibliothèque de classes .NET Framework.

SafeTopLevelWindows l’autorisation restreint les actions répertoriées dans le tableau suivant.

Composant Actions restreintes
Application - Définition de la propriété SafeTopLevelCaptionFormat.
Control - Obtention de la Parent propriété.
- Définition de la propriété Region.
- Appel de la FindForm méthode , FromHandleFocusPreProcessMessageFromChildHandle et , et , ReflectMessageou SetTopLevel de la méthode.
- Appel de la GetChildAtPoint méthode si le contrôle retourné n’est pas un enfant du contrôle appelant.
- Modifier le focus du contrôle à l’intérieur d’un contrôle conteneur.
Cursor - Définition de la propriété Clip.
- Appel de la Hide méthode.
DataGrid - Appel de la ProcessTabKey méthode.
Form - Obtention de la ou MdiParent de la ActiveForm propriété.
- Définition de la propriété , ShowInTaskbarou TopMost de la ControlBoxpropriété.
- Définition de la Opacity propriété inférieure à 50 %.
- Définition de la WindowState propriété Minimized par programmation.
- Appel de la Activate méthode.
- Utilisation des Nonevaleurs , FixedToolWindowet SizableToolWindowFormBorderStyle énumération.
NotifyIcon - L’utilisation du NotifyIcon composant est complètement restreinte.

La SafeSubWindows valeur limite les actions répertoriées dans le tableau suivant, en plus des restrictions placées par la SafeTopLevelWindows valeur.

Composant Actions restreintes
CommonDialog - Affichage d’une boîte de dialogue dérivée de la CommonDialog classe.
Control - Appel de la CreateGraphics méthode.
- Définition de la propriété Cursor.
Cursor - Définition de la propriété Current.
MessageBox - Appel de la Show méthode.

Hébergement de contrôles tiers

Un autre type de manipulation de fenêtre peut se produire si vos formulaires hébergent des contrôles tiers. Un contrôle tiers est tout contrôle personnalisé UserControl que vous n’avez pas développé et compilé vous-même. Bien que le scénario d’hébergement soit difficile à exploiter, il est théoriquement possible pour un contrôle tiers de développer sa surface de rendu pour couvrir la zone entière de votre formulaire. Ce contrôle peut alors reproduire une boîte de dialogue critique et demander des informations telles que des combinaisons nom d’utilisateur/mot de passe ou des numéros de compte bancaire de vos utilisateurs.

Pour limiter ce risque, utilisez des contrôles tiers uniquement auprès de fournisseurs auxquels vous pouvez faire confiance. Si vous utilisez des contrôles tiers que vous avez téléchargés à partir d’une source non vérifiable, nous vous recommandons de vérifier le code source à la recherche d’attaques éventuelles. Après avoir vérifié que la source est non malveillante, vous devez compiler l’assembly vous-même pour garantir que la source correspond à l’assembly.

Appels d’API Windows

Si votre conception d’application nécessite l’appel d’une fonction à partir de l’API Windows, vous accédez au code non managé. Dans ce cas, les actions du code sur la fenêtre ou le système d’exploitation ne peuvent pas être déterminées lorsque vous utilisez des appels ou des valeurs d’API Windows. Classe SecurityPermission et UnmanagedCode valeur de l’accès au SecurityPermissionFlag contrôle d’énumération au code non managé. Une application peut accéder au code non managé uniquement lorsqu’elle reçoit l’autorisation UnmanagedCode . Par défaut, seules les applications qui s'exécutent localement peuvent appeler du code non managé.

Certains membres Windows Forms fournissent un accès non managé qui nécessite l’autorisation UnmanagedCode . Le tableau suivant répertorie les membres de l’espace System.Windows.Forms de noms qui nécessitent l’autorisation. Pour plus d’informations sur les autorisations requises pour un membre, consultez la documentation de la bibliothèque de classes .NET Framework.

Composant Membre
Application Méthode - AddMessageFilter
Propriété- CurrentInputLanguage
Méthode - Exit
Méthode - ExitThread
Événement- ThreadException
CommonDialog Méthode - HookProc
- OwnerWndProc\Méthode
Méthode - Reset
Méthode - RunDialog
Control Méthode - CreateParams
Méthode - DefWndProc
Méthode - DestroyHandle
Méthode - WndProc
Help Méthodes - ShowHelp
Méthode - ShowHelpIndex
NativeWindow Classe - NativeWindow
Screen Méthode - FromHandle
SendKeys Méthode - Send
Méthode - SendWait

Si votre application n’a pas l’autorisation d’appeler du code non managé, votre application doit demander UnmanagedCode une autorisation, ou vous devez envisager d’autres façons d’implémenter des fonctionnalités ; dans de nombreux cas, Windows Forms fournit une alternative managée aux fonctions d’API Windows. En cas d’absence d’alternative et si l’application doit accéder à du code non managé, vous devez élever les autorisations pour l’application.

L’autorisation d’appeler du code non managé permet à une application d’exécuter pratiquement n’importe quoi. Par conséquent, l’autorisation d’appeler du code non managé doit uniquement être accordée pour les applications qui proviennent d’une source approuvée. Selon l’application, la fonctionnalité qui effectue l’appel au code non managé peut également être facultative ou activée uniquement dans l’environnement à confiance totale. Pour plus d’informations sur les autorisations, consultez Autorisations dangereuses et administration de stratégie. Pour plus d’informations sur l’élévation d’autorisations, consultez Administration de la stratégie de sécurité générale.

Voir aussi