共用方式為


程式碼存取安全性的簡介

更新:2007 年 11 月

程式碼存取安全性是協助限制程式碼存取受保護資源和作業的一項機制。在 .NET Framework 中,程式碼存取安全性會執行以下的功能:

  • 定義使用權限和使用權限集合以表示存取各種系統資源的權限

  • 使管理員可以依據程式碼群組的使用權限集合來配置安全性原則

  • 使程式碼會要求執行時所需的使用權限,以及可以用來協助它執行的使用權限,並指定程式碼不能擁有的使用權限

  • 依據程式碼所要求的使用權限以及安全性原則允許的作業,授與使用權限給每一個已載入的組件

  • 使程式碼可以要求它的呼叫端具有特定使用權限

  • 使程式碼要求它的呼叫端處理數位簽章,而只允許特定組織或站台的呼叫端可以呼叫受保護的程式碼

  • 比較呼叫堆疊上每一個呼叫端授與的使用權限和呼叫端必須擁有的使用權限,來加強執行階段時的程式碼限制

為決定程式碼是否已取得授權可存取資源或執行作業,執行階段的安全性系統查核會呼叫堆疊,來比較每一個呼叫端授與的使用權限和要求的使用權限。如果呼叫堆疊中的任一呼叫端並不擁有要求的使用權限,則會擲回一個安全性例外狀況並拒絕存取。堆疊查核行程 (Stack Walk) 的設計用意在於協助防止偽裝攻擊,而使低度受信任的程式碼呼叫高度受信任的程式碼,並使用它來執行未經授權的動作。在執行階段時要求所有呼叫端具有使用權限的確會影響執行的效能,但對協助保護程式碼使其不受信任程度較低程式碼的偽裝攻擊而言則是相當重要。若要使執行效能最佳化,您可以讓您的程式碼執行較少的堆疊查核行程;然而,您必須確定並沒有洩露任何安全漏洞。

下圖說明組件 A4 中的方法需要它的呼叫端必須擁有使用權限 P 時的堆疊查核行程。

安全性堆疊查核行程

程式碼存取安全性

在程式碼存取安全性的一般用途中,應用程式從近端內部網路主機網站直接下載控制項到用戶端,讓使用者可以輸入資料。該控制項即是使用安裝類別庫所建立。以下是程式碼存取安全性在這個案例中可以使用的幾種方式:

  • 在載入時間之前,管理員可以在程式碼已使用特定數位簽章時,設定安全性原則以指定給與程式碼特別的授權 (多於本機網際網路程式碼通常取得的使用權限)。依預設值,預先定義的 LocalIntranet 具名使用權限集合是與所有從近端內部網路下載的程式碼關聯。

  • 在載入期間,除非控制項已有受信任的簽章外,否則和與 LocalIntranet 具名使用權限集合關聯相較,Runtime 不會授與該控制項任何的使用權限。在這種情況下,它會被授與與 LocalIntranet 使用權限集合關聯的使用權限,而且由於它已有受信任的簽章,也可能會取得其他的使用權限。

  • 在執行階段時,當呼叫端 (本例中為裝載控制項 (Hosted Control)) 存取會公開受保護資源的程式庫,或會呼叫 Unmanaged 程式碼的程式庫時,該程式庫將發出一項安全性要求,以檢查呼叫端的使用權限是否已取得適當的使用權限授權。這些安全性檢查是為協助防止控制項在用戶端電腦上執行未經授權的動作。

請參閱

其他資源

程式碼存取安全性