連結需求
連結需求會在 Just-In-Time 編譯期間產生一個安全性檢查,並只檢查您程式碼的即時呼叫端。連結只發生於您的程式碼繫結至型別參考時,其中包括函式指標參考和方法呼叫。如果呼叫端沒有足夠的使用權限以連結至您的程式碼時,則在載入和執行程式碼時將不允許連結並擲回一個 Runtime 例外狀況。連結需求可以在繼承自您程式碼的類別中被覆寫。
請注意在這類需求上並不會執行完整的堆疊查核行程,而您的程式碼仍會受到偽裝攻擊的威脅。連結需求只會指定直接呼叫端要連結至您的程式碼時所必須具備的使用權限,並不會指定所有呼叫端在執行您的程式碼時所必須具備的使用權限。
如果經由反映存取受連結需求保護的方法,連結需求將檢查經由反映所存取程式碼的即時呼叫端。這種情形也會發生於使用反映所執行的探索 (Discovery) 方法和引動過程方法。例如,假設程式碼使用反映以傳回一個 MethodInfo 物件,表示由連結需求保護的方法,然後將 MethodInfo 物件傳遞給使用該物件以叫用原始方法的其他程式碼。在這種情況下,連結需求檢查會執行兩次:一次是針對傳回 MethodInfo 物件的程式碼,而另一次則是針對叫用 (Invoke) 它的程式碼。
**注意 **由於靜態建構函式是由系統在應用程式的程式碼執行路徑以外呼叫的,因此在靜態類別建構函式上執行的連結需求並不會保護建構函式。如此一來,當連結需求套用至整個類別時,它不能保護靜態建構函式的存取,不過它可以保護類別的其餘部份。
以下的程式碼片段將宣告任何連結至 ReadData
方法的程式碼必須擁有 CustomPermission
使用權限。這個使用權限是任意指定的自訂使用權限,並不存在於 .NET Framework 中。需求的設定方式是將 SecurityAction.LinkDemand 旗標傳遞給 CustomPermissionAttribute
。
<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.
}
請參閱
使用屬性 (Attribute) 擴充中繼資料 | 安全性需求 | 建立您自己的程式碼存取使用權限 | 加入宣告式安全性支援 | 程式碼存取安全性