Écriture de contrôles managés sécurisés

Les contrôles managés sont des assemblys référencés à partir de pages Web qui sont téléchargées sur l'ordinateur de l'utilisateur et exécutées sur demande. D'un point de vue de la sécurité d'accès du code, il existe deux types de contrôles managés : ceux qui sont exécutés dans le cadre de la stratégie de sécurité par défaut et ceux qui requièrent un niveau de confiance plus élevé.

Pour écrire des contrôles managés qui sont destinés à s'exécuter dans le cadre de la stratégie de sécurité par défaut, vous n'avez qu'à connaître les opérations qui sont autorisées par la stratégie de sécurité par défaut pour les zones intranet ou Internet. Aussi longtemps qu'un contrôle managé n'exige pas plus d'autorisation pour s'exécuter que celle qu'il reçoit en conséquence de sa zone d'origine, il s'exécutera. (Gardez à l'esprit qu'un administrateur ou un utilisateur peut décider de ne pas octroyer trop d'autorisation au code provenant de zones Internet ou intranet.) Pour exécuter des contrôles managés qui exigent un niveau de confiance plus élevé, l'administrateur ou l'utilisateur doivent ajuster la stratégie de sécurité de tout ordinateur qui exécutera le code.

Chaque fois que cela est possible, les contrôles managés doivent être écrits de façon à ne pas exiger des autorisations qui ne sont pas octroyées à du code Internet ou intranet par défaut. Pour la zone Internet, cela signifie que le code est limité à l'affichage de fenêtres SafeTopLevelWindows et SafeSubWindows (équipées du système de sécurité de façon à les empêcher d'emprunter les boîtes de dialogue du système) en ne communiquant qu'avec son site d'origine et n'utilisant qu'un stockage isolé limité.

Du code intranet a des autorisations légèrement supérieures. Pour plus de détails, consultez Stratégie de sécurité par défaut. Si votre contrôle a besoin d'accéder à des fichiers, d'utiliser des bases de données, de recueillir des informations concernant l'ordinateur du client, etc., il a besoin d'un degré de confiance plus élevé.

Développement

Les contrôles dont le niveau de confiance est élevé sont destinés à s'exécuter dans le cadre d'une stratégie de sécurité moins restrictive que celle normalement garantie par leur origine (intranet ou Internet). La plupart des demandes d'autorisation faites par des bibliothèques sécurisées, telles que les classes .NET Framework, effectuent des parcours de pile qui vérifient que tous les appelants ont reçu l'autorisation demandée et que les pages Web, et non le code managé, sont traitées comme des appelants du point de vue de la sécurité. Les parcours de pile sont effectués pour empêcher du code ayant un niveau de confiance plus faible de détourner du code à niveau de confiance élevé pour exécuter des opérations malveillantes.

Étant donné que les contrôles managés hébergés dans un navigateur peuvent être manipulés par du script actif sur une page Web, cette dernière est considérée comme un appelant et vérifiée pendant un parcours de pile de sécurité pour empêcher les auteurs de pages Web malveillants d'exploiter du code dont le niveau de confiance est élevé. En conséquence du traitement d'une page Web comme un appelant, un contrôle auquel est octroyé un niveau de confiance élevé sur la base de son nom fort ou de son certificat d'éditeur et exécuté à partir d'une page Web, ne pourra pas effectuer des opérations normalement interdites à du code provenant de la même zone que la page Web elle-même (intranet ou Internet). Pour plus d'informations concernant le déploiement, consultez la section suivante. Face à cela, l'écriture de contrôles à niveau de confiance élevé semble impossible, mais la sécurité d'accès du code fournit ce scénario en vous permettant de substituer le comportement du parcours de pile de sécurité de manière sélective.

Les contrôles dont le niveau de confiance est élevé doivent faire une utilisation judicieuse de Asserts pour court-circuiter les parcours de pile pour les autorisations que leurs appelants (les pages Web à partir desquelles ils ont été exécutés) auraient normalement. Lorsque vous utilisez Asserts, vous devez faire attention à ne pas exposer des interfaces API dangereuses qui permettraient à des pages Web malveillantes d'exécuter des opérations inappropriées. Pour cette raison, le niveau d'attention et de connaissance de la sécurité lors de l'écriture d'un contrôle à niveau de confiance élevé approche celui requis pour l'écriture d'une bibliothèque de classes sécurisée.

Voici quelques conseils pour l'écriture de contrôles managés sécurisés :

  • Chaque fois que cela est possible, encapsulez les opérations nécessitant un niveau de confiance élevé de sorte qu'elles ne soient pas exposées par le contrôle. Ainsi, vous pouvez déclarer les autorisations requises par ces opérations et les pages Web utilisant votre contrôle ne pourront pas abuser de la fonctionnalité.

  • Si le design de votre contrôle nécessite que les opérations à niveau de confiance élevé qu'il exécute soient exposées, envisagez de faire une demande d'autorisation d'identité de site ou d'URL pour vous assurer qu'il ne puisse être appelé que par les pages Web à partir desquelles vous l'avez destiné à s'exécuter.

Déploiement

Les contrôles dont le niveau de confiance est élevé doivent toujours avoir un nom fort ou être signés avec un certificat d'éditeur (X.509). Ceci autorise les administrateurs de la stratégie à octroyer un niveau de confiance élevé à ces contrôles sans réduire leur sécurité par rapport à d'autre code intranet/Internet. Une fois l'assembly signé, l'utilisateur doit créer un nouveau groupe de codes associé à des autorisations suffisantes et spécifier que seul du code signé par la société ou l'organisation de l'utilisateur reçoive l'appartenance au groupe de codes. Une fois la stratégie de sécurité ainsi modifiée, le contrôle dont le niveau de confiance est élevé recevra l'autorisation suffisante à son exécution.

Puisque la stratégie de sécurité doit être modifiée pour permettre à des contrôles téléchargés à niveau de confiance élevé de fonctionner, le déploiement de ce type de contrôle est beaucoup plus simple sur un intranet d'entreprise où il y a généralement un administrateur interne qui peut déployer les modifications de stratégie décrites vers de multiples ordinateurs clients. Afin que les contrôles à niveau de confiance élevé puissent être utilisés sur Internet par des utilisateurs généraux sans aucune affiliation d'entreprise ou organisationnelle commune, une relation de confiance doit exister entre l'éditeur du contrôle et l'utilisateur. Enfin, l'utilisateur doit être à l'aise avec l'utilisation des instructions de l'éditeur pour modifier la stratégie et permettre au code dont le niveau de confiance est élevé de s'exécuter. Sinon, le contrôle ne sera pas autorisé à s'exécuter.

Voir aussi

Concepts

Introduction à la sécurité d'accès du code
Écriture des bibliothèques de classes sécurisées
Stratégie de sécurité par défaut

Autres ressources

Création et utilisation d'assemblys avec nom fort
Gestion de la stratégie de sécurité