VerknüpfungsaufrufeLink Demands

Achtung

Codezugriffssicherheit und teilweise vertrauenswürdiger CodeCode Access Security and Partially Trusted Code

.NET Framework bietet einen Mechanismus namens Codezugriffssicherheit (Code Access Security, CAS) zur Erzwingung verschiedener Vertrauensebenen für anderen Code, der in der gleichen Anwendung ausgeführt wird.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). Die Codezugriffssicherheit sollte in .NET Framework nicht als Mechanismus zum Erzwingen von Sicherheitsbegrenzungen verwendet werden, die auf dem Codeursprung oder anderen Identitätsaspekten beruhen.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. Wir aktualisieren unsere Leitfäden, um darauf hinzuweisen, dass die Codezugriffssicherheit und sicherheitstransparenter Code als Sicherheitsbegrenzung bei teilweise vertrauenswürdigem Code nicht unterstützt werden, insbesondere bei Code mit unbekannter Herkunft.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. Wir raten davon ab, Code unbekannter Herkunft zu laden und auszuführen, ohne alternative Sicherheitsmaßnahmen zu treffen.We advise against loading and executing code of unknown origins without putting alternative security measures in place.

Diese Richtlinie gilt für alle Versionen von .NET Framework, außer für die in Silverlight enthaltene .NET Framework-Version.This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

Ein Linkaufruf (Verknüpfungsaufruf) bewirkt eine Sicherheitsüberprüfung während der Just-In-Time-Kompilierung, wobei nur die direkt aufrufende Assembly Ihres Codes überprüft wird.A link demand causes a security check during just-in-time compilation and checks only the immediate calling assembly of your code. Das Verlinken erfolgt, wenn der Code an einen Typverweis, einschließlich Funktionszeigerverweise und Methodenaufrufe, gebunden wird.Linking occurs when your code is bound to a type reference, including function pointer references and method calls. Hat die aufrufende Assembly keine ausreichende Berechtigung, Ihren Code zu verlinken, ist der Link unzulässig, und beim Laden und Ausführen des Codes wird eine Laufzeitausnahme ausgelöst. 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. Linkaufrufe können in Klassen, die von Ihrem Code erben, überschrieben werden.Link demands can be overridden in classes that inherit from your code.

Ein vollständiger Stackwalk wird bei dieser Art von Nachfrage nicht durchgeführt, und der Code ist weiterhin anfällig für Lock Angriffe.A full stack walk is not performed with this type of demand and that your code is still susceptible to luring attacks. Wenn eine Methode in Assembly a z. b. durch einen Link Aufruf geschützt ist, wird ein direkter Aufrufer in Assembly b basierend auf den Berechtigungen von Assembly b ausgewertet. Der Link Aufruf wertet jedoch keine Methode in Assembly C aus, wenn er die Methode in Assembly a mithilfe der-Methode in Assembly B indirekt aufruft. Der Link Aufruf gibt nur die Berechtigungen an, die direkte Aufrufer in der unmittelbaren aufrufenden Assembly zum Verknüpfen mit dem Code benötigen.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. Er gibt nicht die Berechtigungen an, die alle Aufrufer haben müssen, um Ihren Code auszuführen.It does not specify the permissions all callers must have to run your code.

Die Stackwalkmodifizierer Assert, Deny und PermitOnly haben keinen Einfluss auf die Auswertung von Linkaufrufen.The Assert, Deny, and PermitOnly stack walk modifiers do not affect the evaluation of link demands. Da Linkaufrufe keinen Stackwalk ausführen, haben die Stackwalkmodifizierer keinen Einfluss auf Linkaufrufe.Because link demands do not perform a stack walk, the stack walk modifiers have no effect on link demands.

Wenn auf eine durch einen Link Aufruf geschützte Methode über Reflektionzugegriffen wird, überprüft ein Link Aufruf den unmittelbaren Aufrufer des Codes, auf den über Reflektion zugegriffen wird.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. Dies gilt sowohl für Methodenerkennungen als auch Methodenaufrufe, die über Reflektion ausgeführt werden.This is true both for method discovery and for method invocation performed using reflection. Angenommen, Code verwendet Reflektion, um ein-Objekt zurückzugeben, MethodInfo das eine durch einen Link Aufruf geschützte Methode darstellt, und übergibt dieses MethodInfo -Objekt dann an einen anderen Code, der das-Objekt verwendet, um die ursprüngliche Methode aufzurufen.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. In diesem Fall erfolgt die Überprüfung des Link Bedarfs zweimal: einmal für den Code, der das MethodInfo -Objekt zurückgibt, und einmal für den Code, der es aufruft.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.

Hinweis

Ein Linkaufruf, der für einen statischen Klassenkonstruktor durchgeführt wird, schützt diesen Konstruktor nicht, da statische Konstruktoren vom System außerhalb des Codeausführungspfades der Anwendung aufgerufen werden.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. Dies hat zur Folge, dass ein Linkaufruf, wenn er auf eine ganze Klasse angewendet wird, einen statischen Konstruktor nicht schützen kann, obwohl er der Rest der Klasse schützt.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.

Im folgenden Codefragment wird deklarativ angegeben, dass sämtlicher Code mit einer Verlinkung zur ReadData-Methode die CustomPermission-Berechtigung haben muss.The following code fragment declaratively specifies that any code linking to the ReadData method must have the CustomPermission permission. Diese Berechtigung ist eine hypothetische benutzerdefinierte Berechtigung und nicht in .NET Framework vorhanden.This permission is a hypothetical custom permission and does not exist in the .NET Framework. Die Anforderung erfolgt durch Übergeben eines SecurityAction. LinkDemand -Flags an den 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.  
}  

Siehe auchSee also