在Windows作業系統中,一般我們比較常用的安全系統是以使用者或角色為主的安全性機制(role-base security, RBS), 透過對使用者或角色的管理,達到權限控管的目的,這也是大家比較熟悉的權限管理機制。
如果當我們使用一個外來的組件來存取磁碟,為了確保它內部無法執行任何的惡意行為,你希望限定這個組件只能存取特定目錄,像這樣子的狀況,就無法使用 RBS 達到規範,而必須透過 CAS 管控到程式碼身上才有辨法。
在Windows作業系統中,一般我們比較常用的安全系統是以使用者或角色為主的安全性機制(role-base security, RBS), 透過對使用者或角色的管理,達到權限控管的目的,這也是大家比較熟悉的權限管理機制。
如果當我們使用一個外來的組件來存取磁碟,為了確保它內部無法執行任何的惡意行為,你希望限定這個組件只能存取特定目錄,像這樣子的狀況,就無法使用 RBS 達到規範,而必須透過 CAS 管控到程式碼身上才有辨法。
CAS 是一種用來限制資源被存取的機制,包括檔案、目錄、印表機、網路存取...。 .NET Framework 對每個可以被保護資源各提供一類別,定義在 System.Security.Permissions 命名空間裡。 每個類別都有各自的特定成員,藉以控制相關資源的使用權限。例如:
前一章節所描述的內容,是針對整個的組件(assembly),進行 CAS 設定以保護組件的安全。 除此之外,也可以針對組件的方法 (method) 做各別的 CAS 設定以保護方法 的安全。 建立方法安全性時,有二種方式:宣告式 (Declaratively) 和命令式 (Imperatively) 。 使用宣告式時,編譯器會在程式碼執行前就做安全性檢查; 使用命令式時,則在程式碼執行中才做安全性檢查,並控制檢查失敗的處理作業。
設定方法的使用權限請求,也是透過 SecurityAction 列舉型別的設定,就可以請求特定的使用權限。 前一章節有介紹到,在 CAS 組件宣告時, SecurityAction 共有三種設定值,但是在 CAS 方法宣告中,則有六種不同的權限請求設定值:
其中的 LinkDmand 和 InheritanceDemand 二項,只能用在 Declaratively ,不能用在 Imperatively 。
當某個方法的屬性值被設成 Demand 或 LinkDemand ,CAS 並不是檢查目前這個方法的使用權限,而是檢查呼叫的那個方法的使用權限。 Demand 要求所有呼叫端都要檢查;LinkDemand 要求只要檢查直接呼叫端即可。