Požadavky na propojení
Požadavek propojení způsobí kontrolu zabezpečení během kompilace za běhu a kontroluje pouze okamžité volání sestavení vašeho kódu. K propojení dochází v případě, že kód je vázán na typ odkazu, včetně odkazů na funkce ukazatele a volání metod. Pokud volající sestavení nemá dostatečná oprávnění k propojení kódu, propojení není povoleno a výjimka za běhu se vyvolá, když je načten a spuštěn kód. Požadavky propojení mohou být přepsány ve třídách, které dědí z vašeho kódu.
Všimněte si, že plný průchod zásobníkem není prováděn s tímto typem požadavku a že je váš kód stále náchylný k útokům luring. Například pokud metoda v sestavení A je chráněna požadavkem propojení, přímý volající v sestavení B je vyhodnocen na základě oprávnění sestavení B. Požadavek propojení však nevyhodnotí metodu v sestavení C, pokud nepřímo volá metodu v sestavení A pomocí metody v sestavení B. Požadavek propojení určuje pouze oprávnění přímých volajících v okamžitém volání sestavení, kde musí mít propojení na váš kód. Neurčuje oprávnění všem volajícím, kteří musí spustit váš kód.
Modifikátory průchodu zásobníkem Assert, Deny a PermitOnly nemají vliv na hodnocení požadavků propojení. Protože požadavky propojení neprovádějí průchod zásobníkem, modifikátory průchodu zásobníkem nemají žádný vliv na požadavky propojení.
Pokud je metoda chráněna požadavkem propojení a je k ní přistoupeno přes Reflection, pak požadavek propojení zkontroluje okamžitého volajícího kódu, ke kterému bylo přistoupeno prostřednictvím reflexe. To platí pro zjišťování metody i pro vyvolání metody prováděné pomocí reflexe. Předpokládejme například, že kód používá reflexi k vrácení objektu MethodInfo představující metodu chráněnou požadavkem propojení a potom předá objekt MethodInfo některému jinému kódu, který používá objekt k vyvolání původní metody. V tomto případě ověření požadavku propojení nastane dvakrát: jednou pro kód, který vrátí objekt MethodInfo a jednou pro kód, který jej spustí.
![]() |
---|
Požadavek propojení provedený ve statickém konstruktoru třídy nechrání konstruktor, protože statické konstruktory jsou volány systémem mimo spouštěcí cestu kódu dané aplikace.V důsledku toho, když je požadavek propojení aplikován na celou třídu, nelze chránit přístup ke statickému konstruktoru, přestože chrání zbytek třídy. |
Následující fragment kódu deklarativně určuje, že jakékoli propojení kódu na metodu ReadData musí mít oprávnění CustomPermission. Toto oprávnění je hypotetické vlastní oprávnění a neexistuje v rozhraní .NET Framework. Požadavek je proveden předáním příznaku SecurityAction.LinkDemand do 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.
}
Viz také
Koncepty
Rozšíření metadat pomocí atributů
Vytvoření vlastního kódu přístupových oprávnění