共用方式為


安全程式碼撰寫概觀

更新:2007 年 11 月

本章節提供各種方法的概觀,供您設計與安全性系統搭配使用的程式碼。

安全性中性的程式碼

安全性中性的程式碼與安全性系統並無明顯關聯。它會使用接收到的任何使用權限來執行。雖然當應用程式無法攔截與受保護作業 (例如使用檔案、網路等) 關聯的安全性例外狀況時,可能會導致無法處理的例外狀況,安全性中性的程式碼仍然可以利用 .NET Framework 安全性技術。

您應該暸解安全性中性程式庫所具有的特殊特性。假設您的程式庫提供使用檔案或呼叫 Unmanaged 程式碼的 API 項目;如說明所述,如果您的程式碼沒有對應的使用權限,它就不會執行。然而,即使程式碼擁有使用權限,呼叫它的任何應用程式程式碼也必須要有相同的使用權限才能運作。如果呼叫程式碼沒有正確的使用權限,便會因為程式碼存取安全性堆疊查核行程 (Stack Walk) 而導致 SecurityException 出現。

不是重複使用元件的應用程式程式碼

如果您的程式碼所屬的應用程式不會被其他程式碼呼叫,安全性的維護便十分簡單,而且可能不需要特殊的程式碼撰寫。不過,請記住,惡意程式碼可以呼叫您的程式碼。雖然程式碼存取安全性可以制止惡意程式碼存取資源,這類的程式碼還是可以讀取可能含有敏感資訊的欄位或屬性的值。

此外,如果您的程式碼接受網際網路或其他不可靠來源的使用者輸入,您也必須小心惡意輸入。

機器碼實作的 Managed 包裝函式

在這個案例中,通常某些有用的功能是在您想提供給 Managed 程式碼的機器碼中實作的。使用平台叫用或 COM Interop 就可輕鬆撰寫 Managed 包裝函式。但是,如果您這麼做,包裝函式的呼叫端必須具有 Unmanaged 程式碼的權限才會成功。在預設原則中,這表示從內部網路或網際網路下載的程式碼將無法使用包裝函式。

比較好的作法是將 Unmanaged 程式碼權限授與給包裝函式程式碼,而不是將這些權限授與給使用這些包裝函式的所有應用程式,。如果基礎功能未公開 (Expose) 任何資源而且實作也一樣「安全」,包裝函式就只需要判斷它的權限,讓任何程式碼都可以透過它來呼叫。當牽涉到資源時,安全性程式碼撰寫應該與下一章節說明的程式庫程式碼的狀況相同。由於包裝函式對這些資源而言是可能公開的呼叫端,因此小心驗證機器碼安全性的程序是必要的,而且這個程序必須由包裝函式負責執行。

公開受保護資源的程式庫程式碼

這是安全性程式碼撰寫最具威力的方法,因此也具有潛在的危險 (如果誤用的話):將您的程式庫當做其他程式碼存取某些特定資源的介面 (如果使用其他方法就無法使用這些資源),就如同 .NET Framework 的類別對它們使用的資源強制使用權限一般。不論您在何處公開資源,您的程式都必須先要求適用於資源的使用權限 (亦即它必須執行安全性檢查),然後再判斷它的權限,以執行實際的作業。

請參閱

其他資源

安全程式碼撰寫方針