從部分受信任程式碼使用程式庫

更新:2010 年 7 月

注意事項注意事項

本主題將處理強式名稱組件的行為,而且僅適用於層級 1 組件。.NET Framework 4 版 (含) 以後版本中的安全性透明的程式碼,層級 2 組件不會受到強式名稱的影響。如需安全性系統之變更的詳細資訊,請參閱 .NET Framework 4 中的安全性變更

若應用程式從其主機或沙箱收到的權限低於完全信任,除非程式庫撰寫者透過使用 AllowPartiallyTrustedCallersAttribute 屬性的方式特別允許這些應用程式呼叫共用 Managed 程式庫,否則便不允許進行呼叫。 因此,應用程式撰寫者必須留意,某些程式庫將無法從部分受信任內容提供給它們。 根據預設,在部分信任沙箱中執行且不在完全信任組件清單中的所有程式碼都是部分信任。 如果您不希望從部分受信任的內容執行您的程式碼,或是由部分受信任的程式碼呼叫它,則可忽略本章節中的資訊。 但是,如果您撰寫的程式碼必須與部分受信任的程式碼互動或從部分受信任的內容操作,則應該考慮下列因素:

  • 程式庫必須使用強式名稱 (Strong Name) 簽名,才能供多個應用程式共用。 強式名稱可讓您將程式碼放到全域組件快取中,或是加入至沙箱 AppDomain 的完全信任清單中,並且讓客戶驗證某一特定的行動程式碼是否確實是由您所發出。

  • 根據預設,使用強式名稱的層級 1 共用程式庫會針對完全信任權限自動執行隱含的 LinkDemand,而不需程式庫寫入器執行任何動作。

  • 如果呼叫端沒有完全信任使用權限,但仍嘗試呼叫這類程式庫,Runtime 便會擲回 SecurityException,而且不允許呼叫端連結該程式庫。

  • 若要停用自動 LinkDemand 並防止擲回例外狀況,您可以將 AllowPartiallyTrustedCallersAttribute 屬性置於共用程式庫的組件範圍上。 這個屬性讓您的程式庫可以從部分受信任的 Managed 程式碼來呼叫。

  • 如果部分受信任程式碼的程式庫存取權是使用這個屬性授與的,則該程式碼還必須受制於 AppDomain 所定義的其他限制。

  • 並無任何程式方式可供部分受信任程式碼用來呼叫沒有 AllowPartiallyTrustedCallersAttribute 屬性的程式庫。

特定應用程式私用的程式庫不需要強式名稱或 AllowPartiallyTrustedCallersAttribute 屬性,而且不能由應用程式外部潛在的惡意程式碼參考。 這類程式碼已受保護,不會遭到部分受信任的行動程式碼蓄意或非蓄意誤用,而不需要開發人員另外執行任何動作。

對於下列程式碼類型,您應該明確考慮啟用由部分受信任程式碼使用的設定:

  • 已通過審慎的安全穩定性測試,且符合安全程式碼撰寫方針所述規則的程式碼。

  • 專為部分受信任案例撰寫的強式名稱程式碼程式庫。

  • 使用強式名稱簽名的任何元件 (不論是部分或完全受信任),都會由下載自網際網路的程式碼呼叫。

注意事項注意事項

.NET Framework 類別庫中的某些類別沒有 AllowPartiallyTrustedCallersAttribute 屬性,且不能由部分信任程式碼呼叫。如需可由部分信任程式碼呼叫的類別清單,請參閱以 AllowPartiallyTrustedCallersAttribute 標示的 .NET Framework 組件

請參閱

概念

程式碼存取安全性

變更記錄

日期

記錄

原因

2010 年 7 月

內容稍做更新。

內容 Bug 修正。