Freigeben über


Verknüpfungsforderungen

Eine Verknüpfungsforderung bewirkt eine Sicherheitsüberprüfung während der Just-In-Time-Kompilierung, wobei nur der direkte Aufrufer des Codes überprüft wird. Die Verknüpfungen werden erstellt, wenn der Code an einen Typverweis, einschließlich Funktionszeigerverweisen und Methodenaufrufen, gebunden ist. Wenn der Aufrufer nicht über die entsprechende Berechtigung zum Erstellen einer Verknüpfung mit dem Code verfügt, ist die Verknüpfung unzulässig, und beim Laden und Ausführen des Codes wird eine Laufzeitausnahme ausgelöst. Verknüpfungsforderungen 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. Die Verknüpfungsforderung gibt lediglich an, über welche Berechtigungen direkte Aufrufer verfügen müssen, um Verknüpfungen mit dem Code herzustellen. Sie gibt jedoch nicht an, über welche Berechtigungen alle Aufrufer zum Ausführen des Codes verfügen müssen.

Wenn auf eine durch eine Verknüpfungsforderung geschützte Methode durch Reflektion zugegriffen wird, überprüft eine Verknüpfungsforderung 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 mit Hilfe von Reflektion ausgeführt wird. Angenommen, Code gibt unter Verwendung von Reflektion ein MethodInfo-Objekt zurück, das eine durch eine Verknüpfungsforderung 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 Verknüpfungsanforderungsü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.

**Hinweis   **Eine Verknüpfungsanforderung, die 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 eine Verknüpfungsanforderung 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  
[C#]
[CustomPermissionAttribute(SecurityAction.LinkDemand)]
public static string ReadData()
{
   //Access a custom resource.
}

Siehe auch

Erweitern von Metadaten mit Hilfe von Attributen | Sicherheitsforderungen | Erstellen von eigenen Codezugriffsberechtigungen | Hinzufügen der Unterstützung der deklarativen Sicherheit | Codezugriffssicherheit