2011-08-10 30 views
2

我正在嘗試爲加載程序集放置沙箱AppDomain的最低權限。似乎強制在加載程序集的appBase和Read權限上具有PathDiscovery權限,但在相關程序集上不需要權限。我的問題是: 爲什麼我們需要PathDiscovery?在每個需要的組件上讀取訪問不夠嗎? 爲什麼只有加載的程序集需要讀取權限而不是相關的程序?尋找在Sandbox AppDomain中加載程序集的最低權限。爲什麼需要這些權限?

下面的代碼片段給一些背景:

AppDomainSetup setup = new AppDomainSetup 
{ 
    ApplicationName = "Name", 
    ApplicationBase = binFolder, 
}; 

PermissionSet permissionSet = new PermissionSet(PermissionState.None); 
permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); 

// Mandatory. Why PathDiscovery is needed? 
permissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.PathDiscovery, binFolder)); 

// Mandatory. Why Read is not also needed for all dependent assemblies? 
permissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read, assemblyPath)); 

var domain = AppDomain.CreateDomain("Domain Name", null, setup, permissionSet); 

domain.CreateInstanceFromAndUnwrap(assemblyPath, typeName); 

回答

4

爲什麼我們需要PathDiscovery?

因爲成功從指定路徑加載程序集會顯示該路徑存在。同樣,從路徑加載程序集時嘗試拋出的某些異常也會顯示路徑是有效的,即使目標文件不是.NET程序集。

爲什麼只有加載的程序集需要讀取權限而不是相關的程序?

由於加載的程序集不控制加載它的依賴項的位置,因此只需加載依賴程序集就不會顯示有關特定路徑的有效性的信息。也就是說,它確實揭示了一些信息,因爲.NET程序集搜索位置是衆所周知的,所以我認爲可能會認爲這裏的檢查應該更強一些。如果你對此感到強烈,你可以在https://connect.microsoft.com/visualstudio/feedback上發佈錯誤報告。

相關問題