Żądania połączeńLink Demands

Przestroga

Zabezpieczenia dostępu kodu i częściowo zaufany kodCode Access Security and Partially Trusted Code

Platforma .NET Framework zapewnia mechanizm wymuszania różnych poziomów zaufania dla różnego kodu uruchamianego w tej samej aplikacji nazywany zabezpieczeniami dostępu kodu (CAS, Code Access Security).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). Zabezpieczeń dostępu kodu na platformie .NET Framework nie należy używać jako mechanizmu wymuszania granic zabezpieczeń na podstawie pochodzenia kodu lub innych aspektów tożsamości.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. Aktualizujemy nasze wskazówki, aby uwzględnić informacje o tym, że zabezpieczenia dostępu kodu ani kod przezroczysty pod względem zabezpieczeń nie będą obsługiwane jako granice zabezpieczeń z częściowo zaufanym kodem, zwłaszcza kodem nieznanego pochodzenia.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. Odradzamy ładowanie i wykonywanie kodu z nieznanego źródła bez zapewnienia alternatywnych środków bezpieczeństwa.We advise against loading and executing code of unknown origins without putting alternative security measures in place.

Te zasady mają zastosowanie do wszystkich wersji platformy .NET Framework, ale nie mają zastosowania do platformy .NET Framework zawartej w technologii Silverlight.This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

Żądanie linku powoduje sprawdzenie zabezpieczeń podczas kompilacji just-in-Time i sprawdza tylko bezpośrednio wywołujący zestaw kodu.A link demand causes a security check during just-in-time compilation and checks only the immediate calling assembly of your code. Łączenie występuje, gdy kod jest powiązany z odwołaniem do typu, w tym odwołaniami wskaźników funkcji i wywołaniami metod.Linking occurs when your code is bound to a type reference, including function pointer references and method calls. Jeśli zestaw wywołujący nie ma wystarczających uprawnień do łączenia się z kodem, link jest niedozwolony i podczas ładowania i uruchamiania kodu zostanie wygenerowany wyjątek czasu wykonywania.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. Wymagania dotyczące linków można przesłonić w klasach, które dziedziczą z kodu.Link demands can be overridden in classes that inherit from your code.

Należy zauważyć, że pełne przechodzenie stosu nie jest przeprowadzane z tym typem żądania i że kod nadal jest podatny na ataki luring.Note that a full stack walk is not performed with this type of demand and that your code is still susceptible to luring attacks. Na przykład jeśli metoda w zestawie A jest chroniona przez żądanie linku, bezpośredni obiekt wywołujący w zestawie B jest oceniany na podstawie uprawnień zestawu B. Jednak żądanie linku nie będzie szacować metody w zestawie C, jeśli pośrednio wywołuje metodę w zestawie A przy użyciu metody w zestawie B. Żądanie linku określa tylko elementy wywołujące bezpośrednich uprawnień w bezpośrednim wywołującym zestawie musi mieć połączenie z kodem.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. Nie określa uprawnień, które mogą być wymagane do uruchomienia kodu.It does not specify the permissions all callers must have to run your code.

Modyfikatory Denyprzeszukiwania stosu PermitOnly,i nie wpływają na ocenę żądań związanych z łączami. AssertThe Assert, Deny, and PermitOnly stack walk modifiers do not affect the evaluation of link demands. Ponieważ wymagania dotyczące linków nie wykonują przechodzenia stosu, Modyfikatory przeszukiwania stosu nie mają wpływu na wymagania dotyczące linków.Because link demands do not perform a stack walk, the stack walk modifiers have no effect on link demands.

Jeśli dostęp do metody chronionej przez żądanie linku odbywa się za pomocą odbicia, żądanie linku sprawdza natychmiastowy obiekt wywołujący kod, do którego uzyskano dostęp za pomocą odbicia.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. Dotyczy to zarówno odnajdywania metody, jak i wywołania metody wykonywanej przy użyciu odbicia.This is true both for method discovery and for method invocation performed using reflection. Załóżmy na przykład, że kod używa odbicia do zwrócenia MethodInfo obiektu reprezentującego metodę chronioną przez żądanie linku, a następnie przekazuje ten obiekt MethodInfo do innego kodu, który używa obiektu do wywołania pierwotnej metody.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. W takim przypadku sprawdzanie wymagań linku odbywa się dwa razy: raz dla kodu, który zwraca obiekt MethodInfo i jeden raz dla kodu, który go wywołuje.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.

Uwaga

Żądanie linku wykonywane na konstruktorze klasy statycznej nie chroni konstruktora, ponieważ konstruktory statyczne są wywoływane przez system, poza ścieżką wykonywania kodu aplikacji.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. W związku z tym, gdy żądanie linku jest stosowane do całej klasy, nie może chronić dostępu do konstruktora statycznego, chociaż chroni resztę klasy.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.

Poniższy fragment kodu deklaratywnie określa, że każdy kod łączący się ReadData z tą metodą musi CustomPermission mieć uprawnienie.The following code fragment declaratively specifies that any code linking to the ReadData method must have the CustomPermission permission. To uprawnienie jest hipotetycznym uprawnieniem niestandardowym i nie istnieje w .NET Framework.This permission is a hypothetical custom permission and does not exist in the .NET Framework. Żądanie jest wykonywane przez przekazanie flagi SecurityAction. LinkDemand do 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.  
}  

Zobacz takżeSee also