Dot-Net

C#:什麼是部分信任的呼叫者?

  • October 12, 2019

我還沒有在一頁中看到明確定義:部分受信任的呼叫者。

我正在研究 APTCA,這總是被提及,但 MSDN 沒有關於它的文章。

我只有一些線索,但我不是 100% 確定。

  • 從網路共享執行的程式碼是否符合“部分受信任的呼叫者”的條件?即使我們以管理員身份執行它(Windows UAC)?
  • .NET 應用程序作為“部分受信任”執行的其他方式是什麼?
  • 什麼是 ASP.net 環境中的“部分受信任的呼叫者”?

我遇到過很多文章提到有關部分信任的呼叫者的業務,但沒有直接定義它們本身是什麼。

任何具有除FullTrust部分信任呼叫者之外的信任級別的呼叫者。

來自Class的MSDN 庫AllowPartiallyTrustedCallersAttribute

允許部分受信任的程式碼呼叫程序集。如果沒有此聲明,則只有完全受信任的呼叫者才能使用該程序集。

因此,如果您正在創建一個將由任何沒有級別的程序集使用的庫**,FullTrust您必須使用APTCA顯式聲明它(允許部分信任的C** allers A****屬性)。

那麼,當應用程序以完全信任或部分信任的方式執行時,它是如何確定的呢?

信任級別與 AppDomain 相關聯,它是根據所謂的證據確定的。這都是 .NET 程式碼訪問安全性的一部分。本文對其組件進行了很好的概述。從那裡:

CAS 使用證據辨識程序集,可以通過一些元素來辨識程序集,例如程序集的位置、雜湊碼和簽名。證據是執行時收集的關於程序集的資訊,用於確定程序集屬於哪個程式碼組。程式碼組依次授予程序集權限集。

權限集是安全配置的獨特組合,可確定每個有權訪問機器的使用者可以在該機器上執行的操作。.NET Framework 附帶了幾個權限集,如下表所示:

  • FullTrust:允許完全訪問所有資源。
  • 一切:允許完全訪問所有資源(組未添加到程序集列表)
  • Internet:授予預設權限。
  • SkipVerification:繞過所有安全驗證
  • 無:拒絕所有訪問,包括執行
  • 執行:允許僅執行訪問。

因此,通過檢查正在執行的程序集,CLR 將確定應用程序是完全信任還是部分信任。這對允許該應用程序執行的操作有影響,例如訪問文件系統或允許呼叫哪些庫(如果它是部分信任應用程序,則標記為 APTCA)。

但是,.NET 4 在安全性方面引入了重大變化

預設情況下,非託管應用程序在 v4.0 下執行時不受託管安全策略的約束。實際上,這意味著您從命令提示符或通過點兩下 Windows 資源管理器中的 .exe 啟動的任何託管應用程序都將執行完全受信任,它載入的所有程序集(包括它從非執行檔所在的目錄)。

事實上,除了 ASP.NET 和 ClickOnce 等沙盒應用程序之外,大多數 CAS 都已被棄用

(…) 在 CLR 的 v4 中,CAS 策略已被棄用,而策略決定完全由應用程序的主機決定。但是,以 CAS 為名的其他安全機制仍然存在並受到支持,這些機制允許主機配置 AppDomain 以託管沙盒程式碼並允許庫作者編寫一個安全的 APTCA 庫,將服務公開給部分信任。

因此,在 .NET 4 更改之後,ASP.NET 4 安全性也發生了變化,並且 ASP.NET 應用程序預設是完全受信任的應用程序。然而,這可以通過將trustLevel屬性設置為不同於 的值在配置中進行更改Full

綜上所述,從 .NET 4 及更高版本開始,您可以假設您的應用程序預設以完全信任的方式執行,除非您通過LegacyCasPolicy在配置文件中選擇加入 CAS。這同樣適用於 ASP.NET 應用程序,除非您選擇設置不同的信任級別。

引用自:https://stackoverflow.com/questions/23882770