Utilisation de bibliothèques à partir de code d'un niveau de confiance partielUsing Libraries from Partially Trusted Code

Attention

Sécurité d'accès du code et code d'un niveau de confiance partielCode Access Security and Partially Trusted Code

Le .NET Framework fournit un mécanisme, appelé « sécurité d'accès du code (CAS) », qui permet de mettre en œuvre différents niveaux de confiance sur différents codes exécutés dans la même application.The .NET Framework provides a mechanism for the enforcement of varying levels of trust on different code running in the same application called Code Access Security (CAS). La sécurité d’accès du code dans le .NET Framework ne doit pas être utilisée comme un mécanisme d’application de limites de sécurité basées sur l’origine du code et d’autres aspects de l’identité.Code Access Security in .NET Framework should not be used as a mechanism for enforcing security boundaries based on code origination or other identity aspects. Nous mettons actuellement à jour le contenu de notre aide pour refléter la non-prise en charge de la sécurité d’accès du code et du code transparent de sécurité comme limite de sécurité avec du code d’un niveau de confiance partiel, notamment du code d’origine inconnue.We are updating our guidance to reflect that Code Access Security and Security-Transparent Code will not be supported as a security boundary with partially trusted code, especially code of unknown origin. Nous vous déconseillons de charger et d'exécuter du code d'origine inconnue sans mettre en place d'autres mesures de sécurité.We advise against loading and executing code of unknown origins without putting alternative security measures in place.

Cette stratégie s'applique à toutes les versions du .NET Framework, mais ne concerne pas le .NET Framework inclus dans Silverlight.This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

Notes

Cette rubrique traite du comportement des assemblys avec nom fort et s’applique uniquement aux assemblys de niveau 1 .This topic addresses the behavior of strong-named assemblies and applies only to Level 1 assemblies. Le code transparent de sécurité, les assemblys de niveau 2 dans le .NET Framework 4 ou version ultérieure ne sont pas affectés par les noms forts.Security-Transparent Code, Level 2 assemblies in the .NET Framework 4 or later are not affected by strong names. Pour plus d’informations sur les modifications apportées au système de sécurité, consultez modifications de sécurité.For more information about changes to the security system, see Security Changes.

Les applications qui n’ont pas reçu un niveau de confiance totale de la part de leur hôte ou bac à sable (sandbox) ne sont pas autorisées à appeler les bibliothèques managées partagées, sauf si le créateur de la bibliothèque les autorise explicitement à passer outre l’utilisation de l’attribut AllowPartiallyTrustedCallersAttribute.Applications that receive less than full trust from their host or sandbox are not allowed to call shared managed libraries unless the library writer specifically allows them to through the use of the AllowPartiallyTrustedCallersAttribute attribute. Par conséquent, les auteurs d'applications doivent être conscients que certaines bibliothèques pas seront disponibles dans un contexte de confiance partielle.Therefore, application writers must be aware that some libraries will not be available to them from a partially trusted context. Par défaut, tout le code qui s’exécute dans un bac à sable (sandbox) de confiance partielle et ne figure pas dans la liste des assemblys de confiance totale est partiellement approuvé.By default, all code that executes in a partial-trust sandbox and is not in the list of full-trust assemblies is partially trusted. S'il n'est pas prévu que votre code soit exécuté dans un contexte de confiance partielle ou qu'il soit appelé par du code partiellement fiable, les informations de cette section ne vous concernent pas.If you do not expect your code to be executed from a partially trusted context or to be called by partially trusted code, you do not have to be concerned about the information in this section. Toutefois, si vous écrivez du code qui doit interagir avec du code partiellement fiable ou fonctionner dans un contexte de confiance partiel, vous devez prendre en compte les éléments suivants :However, if you write code that must interact with partially trusted code or operate from a partially trusted context, you should consider the following factors:

  • Les bibliothèques doivent être signées avec un nom fort pour pouvoir être partagées par plusieurs applications.Libraries must be signed with a strong name in order to be shared by multiple applications. Les noms forts permettent à votre code d'être placé dans un Global Assembly Cache ou d'être ajouté à la liste de confiance totale d'un bac à sable AppDomain. De plus, ils permettent aux utilisateurs de vérifier qu'une portion du code mobile provient bien de vous.Strong names allow your code to be placed in the global assembly cache or added to the full-trust list of a sandboxing AppDomain, and allow consumers to verify that a particular piece of mobile code actually originates from you.

  • Par défaut, les bibliothèques partagées de niveau 1 avec nom fort effectuent automatiquement un LinkDemand implicite pour une confiance totale, sans que le writer de bibliothèque ait à faire quoi que ce soit.By default, strong-named Level 1 shared libraries perform an implicit LinkDemand for full trust automatically, without the library writer having to do anything.

  • Si un appelant ne dispose pas d'une confiance totale et tente d'appeler ce type de bibliothèque, le runtime lève une SecurityException et l'appelant n'est pas autorisé à se connecter à la bibliothèque.If a caller does not have full trust but still tries to call such a library, the runtime throws a SecurityException and the caller is not allowed to link to the library.

  • Pour désactiver le LinkDemand automatique et empêcher la levée de l’exception, vous pouvez placer l’attribut AllowPartiallyTrustedCallersAttribute sur l’étendue de l’assembly d’une bibliothèque partagée.In order to disable the automatic LinkDemand and prevent the exception from being thrown, you can place the AllowPartiallyTrustedCallersAttribute attribute on the assembly scope of a shared library. Cet attribut permet à vos bibliothèques d'être appelées depuis du code managé partiellement fiable.This attribute allows your libraries to be called from partially trusted managed code.

  • Le code partiellement fiable qui reçoit l'accès à une bibliothèque possédant cet attribut est toujours soumis à des restrictions supplémentaires définies par AppDomain.Partially trusted code that is granted access to a library with this attribute is still subject to further restrictions defined by the AppDomain.

  • Il n’existe pas de méthode par programmation pour le code partiellement fiable pour appeler une bibliothèque qui n’a pas l’attribut AllowPartiallyTrustedCallersAttribute .There is no programmatic way for partially trusted code to call a library that does not have the AllowPartiallyTrustedCallersAttribute attribute.

Les bibliothèques qui sont privées pour une application spécifique ne nécessitent pas de nom fort ou d’attribut AllowPartiallyTrustedCallersAttribute et ne peuvent pas être référencées par du code potentiellement malveillant en dehors de l’application.Libraries that are private to a specific application do not require a strong name or the AllowPartiallyTrustedCallersAttribute attribute and cannot be referenced by potentially malicious code outside the application. Ce code est protégé contre toute mauvaise utilisation, intentionnelle ou non, par du code mobile partiellement fiable, sans que le développeur n'ait à intervenir.Such code is protected against intentional or unintentional misuse by partially trusted mobile code without the developer having to do anything extra.

Vous devez envisager d'activer explicitement l'utilisation des types de code suivants pour le code partiellement fiable :You should consider explicitly enabling use by partially trusted code for the following types of code:

  • Code qui a été soigneusement testé pour identifier les vulnérabilités de sécurité et qui est conforme aux instructions décrites dans instructions de codage sécurisé.Code that has been diligently tested for security vulnerabilities and is in compliance with the guidelines described in Secure Coding Guidelines.

  • Les bibliothèques de code avec nom fort qui sont écrites spécifiquement pour les scénarios de confiance partielle.Strong-named code libraries that are specifically written for partially trusted scenarios.

  • Tous les composants (partiellement ou entièrement fiables) signés avec un nom fort qui seront appelés par du code téléchargé depuis Internet.Any components (whether partially or fully trusted) signed with a strong name that will be called by code that is downloaded from the Internet.

Notes

Certaines classes de la bibliothèque de classes .NET Framework n’ont pas l’attribut AllowPartiallyTrustedCallersAttribute et ne peuvent pas être appelées par du code de confiance partielle.Some classes in the .NET Framework class library do not have the AllowPartiallyTrustedCallersAttribute attribute and cannot be called by partially trusted code.

Voir aussiSee also