Demandes de liaisonLink Demands

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.

Une demande de liaison entraîne une vérification de sécurité pendant la compilation juste-à-temps. Seul l'assembly appelant immédiat de votre code est vérifié.A link demand causes a security check during just-in-time compilation and checks only the immediate calling assembly of your code. La liaison est établie quand le code est lié à une référence de type, y compris les références de pointeur fonction et les appels de méthode.Linking occurs when your code is bound to a type reference, including function pointer references and method calls. Si l'assembly appelant ne dispose pas des autorisations suffisantes pour établir une liaison avec votre code, la liaison n'est pas autorisée et une exception d'exécution est levée quand le code est chargé et exécuté.If the calling assembly does not have sufficient permission to link to your code, the link is not allowed and a runtime exception is thrown when the code is loaded and run. Les demandes de liaison peuvent être substituées dans les classes qui héritent de votre code.Link demands can be overridden in classes that inherit from your code.

Notez qu'un parcours de pile complet n'est pas exécuté avec ce type de demande et que votre code est toujours susceptible de subir des attaques malveillantes.Note that a full stack walk is not performed with this type of demand and that your code is still susceptible to luring attacks. Par exemple, si une méthode de l’assembly A est protégée par une demande de liaison, un appelant direct de l’assembly B est évalué en fonction des autorisations de l’assembly B. Toutefois, la demande de liaison n’évaluera pas une méthode dans l’assembly C si elle appelle indirectement la méthode dans l’assembly A à l’aide de la méthode de l’assembly B. La demande de liaison spécifie uniquement les autorisations que les appelants directs dans l’assembly appelant immédiat doivent avoir pour créer un lien vers votre code.For example, if a method in assembly A is protected by a link demand, a direct caller in assembly B is evaluated based on the permissions of Assembly B. However, the link demand will not evaluate a method in assembly C if it indirectly calls the method in assembly A using the method in assembly B. The link demand specifies only the permissions direct callers in the immediate calling assembly must have to link to your code. Elle ne spécifie pas les autorisations que tous les appelants doivent avoir pour exécuter votre code.It does not specify the permissions all callers must have to run your code.

Les modificateurs de parcours de pile Assert, Deny et PermitOnly n'affectent pas l'évaluation des demandes de liaison.The Assert, Deny, and PermitOnly stack walk modifiers do not affect the evaluation of link demands. Étant donné que les demandes de liaison n'effectuent pas de parcours de pile, les modificateurs de parcours de pile n'ont aucun effet sur les demandes de liaison.Because link demands do not perform a stack walk, the stack walk modifiers have no effect on link demands.

Si une méthode protégée par une demande de liaison est accessible par réflexion, une demande de liaison vérifie l’appelant immédiat du code accessible via la réflexion.If a method protected by a link demand is accessed through Reflection, then a link demand checks the immediate caller of the code accessed through reflection. Cela est vrai à la fois pour les détections de méthodes et les appels de méthodes effectués à l'aide de la réflexion.This is true both for method discovery and for method invocation performed using reflection. Par exemple, supposons que le code utilise la MethodInfo réflexion pour retourner un objet représentant une méthode protégée par une demande de liaison, puis passe cet objet MethodInfo à un autre code qui utilise l’objet pour appeler la méthode d’origine.For example, suppose code uses reflection to return a MethodInfo object representing a method protected by a link demand and then passes that MethodInfo object to some other code that uses the object to invoke the original method. Dans ce cas, la vérification de la demande de liaison se produit deux fois: une fois pour le code qui retourne l’objet MethodInfo et une fois pour le code qui l’appelle.In this case the link demand check occurs twice: once for the code that returns the MethodInfo object and once for the code that invokes it.

Notes

Une demande de liaison exécutée sur un constructeur de classe statique ne protège pas le constructeur, car les constructeurs statiques sont appelés par le système, en dehors du chemin d’exécution du code de l’application.A link demand performed on a static class constructor does not protect the constructor because static constructors are called by the system, outside the application's code execution path. Par conséquent, quand une demande de liaison est appliquée à une classe entière, elle ne peut pas protéger l'accès à un constructeur statique, même si elle protège le reste de la classe.As a result, when a link demand is applied to an entire class, it cannot protect access to a static constructor, although it does protect the rest of the class.

Le fragment de code suivant spécifie de manière déclarative que tout code lié à la méthode ReadData doit avoir l'autorisation CustomPermission.The following code fragment declaratively specifies that any code linking to the ReadData method must have the CustomPermission permission. Cette autorisation est une autorisation personnalisée hypothétique et n'existe pas dans le .NET Framework.This permission is a hypothetical custom permission and does not exist in the .NET Framework. La demande est effectuée en passant un indicateur SecurityAction. LinkDemand à CustomPermissionAttribute.The demand is made by passing a SecurityAction.LinkDemand flag to the CustomPermissionAttribute.

<CustomPermissionAttribute(SecurityAction.LinkDemand)> _  
Public Shared Function ReadData() As String  
    ' Access a custom resource.  
End Function    
[CustomPermissionAttribute(SecurityAction.LinkDemand)]  
public static string ReadData()  
{  
    // Access a custom resource.  
}  

Voir aussiSee also