代碼訪問安全性負責處理執行所授予權限的安全檢查。這些安全檢查的獨特方面是,它們不僅會檢查試圖執行受保護操作的代碼,而且會沿堆棧檢查它的所有調用方。要讓檢查獲得成功,所有被檢查的代碼都必須具有所需權限(可以重寫)。
安全檢查是有好處的,因為它們可以防止引誘攻擊。引誘攻擊是指未經授權的代碼調用您的代碼,并引誘您的代碼代替未經授權的代碼執行某些操作。假設您有一個讀取文件的應用程序,并且安全策略將讀取文件的權限授予了您的代碼。因為您的所有應用程序代碼都擁有權限,所以會通過代碼訪問安全性檢查。但是,如果無權訪問文件的惡意代碼以某種方式調用了您的代碼,那么安全檢查將失敗,這是因為不受信任的代碼調用了您的代碼,從而在堆棧上可見。
需要注意的是,該安全性的所有方面都是基于允許代碼執行什么操作這一機制的;诘卿浶畔τ脩暨M行授權是基礎操作系統完全獨立的安全功能。請將這兩個安全系統看作多層防御:例如,要訪問一個文件,必須要通過代碼授權和用戶授權。雖然在許多依賴用戶登錄信息或其他憑據來控制某些用戶可以和不可以執行某項操作的應用程序中,用戶授權很重要,但這種類型的安全不是本文討論的重點。
安全編碼的目標我們假設安全策略是正確的,并且潛在的惡意代碼不具有授予信任代碼的權限,該權限允許受信任代碼安全地執行功能更強大的操作。(如果進行其他假設,將使一種類型的代碼無法與其他類型的代碼區分開,從而使問題不會發生。)使用強制 .NET 框架的權限和代碼中實施的其他措施時,您必須建立障礙來防止惡意代碼獲得您不希望它得到的信息,或防止它執行惡意的操作。此外,在受信任代碼的所有預期情況中,必須在代碼的安全性和可用性之間找到一種平衡。
基于證據的安全策略和代碼訪問安全性為實現安全性提供了非常強大的顯式機制。大多數應用程序代碼只需要使用 .NET 框架實現的基礎結構。在某些情況下,還需要其他特定于應用程序的安全性,該安全性是通過擴展安全系統或使用新的特殊方法生成的。
安全編碼的方法這些安全技術的一個優點是,您通?梢酝浰鼈兊拇嬖。如果將代碼執行任務所需的權限授予代碼,那么一切將正常工作(同時,您將能夠抵御潛在的攻擊,例如,前面描述的引誘攻擊)。但是,在某些特定情況下,您必須顯式地處理安全問題。下面的幾個部分描述了這些方法。即使這些部分并不直接適用于您,但了解這些安全問題總是有用的。
安全中立代碼安全中立代碼不對安全系統執行任何顯式操作。它只使用獲得的權限來運行。盡管無法捕獲受保護操作(例如,使用文件、網絡等)的安全異常會導致不良的用戶體驗(這是指包含許多細節的異常,但對大多數用戶來說這些細節是完全模糊的),但這種方式利用了安全技術,因為即使是高度受信任的代碼也無法降低安全保護的程度?赡馨l生的最壞情況是,調用方將需要許多權限,否則會被安全機制禁止運行。
安全中立庫具有您應當了解的特殊特征。假設此庫提供的 API 元素需要使用文件或調用非托管代碼;如果您的代碼沒有相應的權限,將無法按描述運行。但是,即使該代碼擁有權限,調用它的任何應用程序代碼也必須擁有相同的權限才能運行。如果呼叫代碼沒有正確的權限,那么安全異常將作為代碼訪問安全性堆棧審核的結果出現。如果可以要求調用方對庫所執行的所有操作都擁有權限,那么這將是實現安全性的簡單且安全的方式,因為它不涉及危險的安全重寫。但是,如果想讓調用庫的應用程序代碼不受權限要求的影響,并減少對非常強大的權限的需要,您必須了解與受保護資源配合工作的庫模型,這部分內容將在本文的“公開受保護資源的庫代碼”部分中進行描述。
文章來源于領測軟件測試網 http://www.kjueaiud.com/