反映發出中的安全性問題
本主題說明使用反映發出建立動態組件時需要瞭解的安全性問題。某些案例需要特定使用權限。其他案例需要為產生的程式碼建立使用權限。下列說明中,詞彙「呼叫端」意指動態組件和 (或) 動態模組的建立者。
需要特定使用權限的案例
執行階段要求撰寫中的組件具有 ReflectionPermissionFlag.ReflectionEmit 使用權限,以叫用 AssemblyBuilder 物件和 ModuleBuilder 物件上的某些作業。因為反映發出使用 Reflection,撰寫中的組件也可以要求使用權限使用 Reflection。
為產生的程式碼建立使用權限
呼叫端需要適當的檔案使用權限來保存 (Persist) 動態組件。
具有 SecurityPermissionFlag.ControlEvidence 使用權限的呼叫端可以提供辨識項給產生的程式碼。這個辨識項透過原則來對應,以決定授與的使用權限。
任何呼叫端都可以提供 Null 辨識項,在此情況中組件將取得呼叫端的使用權限集合。這確保產生的程式碼不會有較其呼叫端更大的使用權限。
在動態組件已經保存到磁碟之後,後續的載入會根據與保存組件所在位置相關的原則來取得授權。也就是,組件像任何其他從磁碟載入的組件一樣被看待。
一定要驗證由非完全信任呼叫端產生的程式碼。特別是,執行階段一定要驗證沒有 SecurityPermissionFlag.SkipVerification 使用權限的程式碼。完全受信任的呼叫端可以略過驗證,或者要求產生的程式碼接受驗證。