Freigeben über


Verknüpfungsaufrufe

Ein Linkaufruf bewirkt eine Sicherheitsüberprüfung während der Just-In-Time-Kompilierung, wobei nur die direkt aufrufende Assembly des Codes überprüft wird. Die Links werden erstellt, wenn der Code an einen Typverweis, einschließlich Funktionszeigerverweisen und Methodenaufrufen, gebunden ist. Wenn die aufrufende Assembly nicht über die entsprechende Berechtigung zum Erstellen einer Verknüpfung mit dem Code verfügt, ist der Link unzulässig, und beim Laden und Ausführen des Codes wird eine Laufzeitausnahme ausgelöst. Linkaufrufe können in Klassen überschrieben werden, die vom Code erben.

Beachten Sie, dass bei diesem Typ von Forderung kein vollständiger Stackwalk durchgeführt wird und der Code immer noch anfällig für Täuschungsmanöver ist. Wenn eine Methode z. B. in Assembly A durch einen Linkaufruf geschützt wird, wird ein direkter Aufrufer in Assembly B ausgehend von den Berechtigungen der Assembly B ausgewertet. Der Linkaufruf wertet jedoch keine Methode in Assembly C aus, wenn er die Methode in Assembly A indirekt mit der der Methode in Assembly B aufruft. Der Linkaufruf gibt nur die Berechtigungen an, die direkte Aufrufer in der unmittelbar aufrufenden Assembly für eine Verknüpfung mit dem Code haben müssen. Sie gibt jedoch nicht an, über welche Berechtigungen alle Aufrufer zum Ausführen des Codes verfügen müssen.

Die Stackwalkmodifizierer Assert, Deny und PermitOnly haben keinen Einfluss auf die Auswertung von Linkaufrufen. Da Linkaufrufe keinen Stackwalk ausführen, haben Stackwalkmodifizierer keinen Einfluss auf Linkaufrufe.

Wenn auf eine durch einen Linkaufruf geschützte Methode durch Reflektion zugegriffen wird, überprüft ein Linkaufruf den direkten Aufrufer des Codes, auf den durch Reflektion zugegriffen wurde. Dies gilt sowohl für das Erkennen als auch für das Aufrufen der Methode, das mithilfe von Reflektion ausgeführt wird. Angenommen, Code gibt unter Verwendung von Reflektion ein MethodInfo-Objekt zurück, das eine durch einen Linkaufruf geschützte Methode darstellt, und übergibt dieses MethodInfo-Objekt anschließend an anderen Code, der damit die ursprüngliche Methode aufruft. In diesem Fall wird die Linkaufrufüberprüfung zweimal durchgeführt, einmal für den Code, der das MethodInfo-Objekt zurückgibt, und einmal für den Code, der dieses aufruft.

HinweisHinweis

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.Dies hat zur Folge, dass ein Linkaufruf den Zugriff auf einen statischen Konstruktor nicht schützen kann, wenn sie auf eine ganze Klasse angewendet wird, obwohl der Rest der Klasse durch sie geschützt ist.

Im folgenden Codefragment wird deklarativ angegeben, dass sämtlicher Code mit einer Verknüpfung mit der ReadData-Methode über die CustomPermission-Berechtigung verfügen muss. Dies ist eine hypothetische benutzerdefinierte Berechtigung, die in .NET Framework nicht vorhanden ist. Die Forderung wird vorgenommen, indem ein SecurityAction.LinkDemand-Flag an das CustomPermissionAttribute übergeben wird.

<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 auch

Konzepte

Erweitern von Metadaten mithilfe von Attributen

Sicherheitsforderungen

Erstellen von eigenen Codezugriffsberechtigungen

Hinzufügen der Unterstützung der deklarativen Sicherheit

Codezugriffssicherheit