共用方式為


委派

.NET Framework 各版的委派 (Delegate) 安全性有所不同。本節中會說明不同的委派行為和關聯的安全性考量。

在 .NET Framework 的 1.0 版和 1.1 版中

.NET Framework 的 1.0 版和 1.1 版會對委派建立者和委派呼叫端執行下列安全性動作。

  • 建立委派時,會對委派建立者的授權集執行委派目標方法上的安全性連結要求。無法滿足安全性動作就會導致 SecurityException

  • 叫用 (Invoke) 委派時,會執行委派呼叫端上任何現有的安全性要求。

當您的程式碼從可能呼叫它的較不受信任的程式碼接受委派時,請絕對不要讓較不受信任的程式碼提高它的使用權限。如果您接受委派 (Delegate) 並在稍後使用它,建立該委派的程式碼就不會在呼叫堆疊上,而如果委派中或之下的程式碼嘗試執行受保護的作業,也不會測試該程式碼的使用權限。如果您的程式碼和呼叫端程式碼擁有高於建立者的使用權限,就算建立者不是呼叫堆疊的一部分,它也可以安排呼叫路徑。

若要解決這個問題,您可以限制您的呼叫端 (例如利用要求使用權限的方式),或是限制委派可以執行的使用權限 (例如,使用 DenyPermitOnly 堆疊覆寫)。

在 .NET Framework 的 2.0 版和以後版本中

.NET Framework 2.0 版和先前的版本不一樣,它會在建立和呼叫委派時對委派建立者執行安全性動作。

  • 建立委派時,會對委派建立者的授權集執行委派目標方法上的安全性連結要求。無法滿足安全性動作就會導致 SecurityException

  • 委派建立期間也會擷取委派建立者的授權集,並與委派一起儲存。

  • 叫用委派時,如果委派建立者和呼叫端各屬於不同的組件 (Assembly),就會先對目前內容中的任何要求評估委派建立者之擷取的授權集。接著,便會執行委派呼叫端上任何現有的安全性要求。

請參閱

其他資源

安全程式碼撰寫方針