寻找在沙箱AppDomain中加载程序集的最低权限.为什么需要这些权限

本文关键字:权限 为什么 AppDomain 程序集 加载 寻找 | 更新日期: 2023-09-27 18:04:58

我正试图为沙箱AppDomain设置最低权限,以便加载程序集。似乎必须对appBase具有PathDiscovery权限,对加载的程序集具有Read权限,但不需要对依赖的程序集具有权限。我的问题是:为什么我们需要PathDiscovery?对每个所需程序集的读访问还不够吗?为什么只有加载的程序集需要读权限,而不需要依赖的程序集?

下面的代码片段给出一些上下文:

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);

寻找在沙箱AppDomain中加载程序集的最低权限.为什么需要这些权限

为什么我们需要PathDiscovery?

因为从指定路径成功加载程序集将显示该路径存在。类似地,尝试从路径加载程序集时引发的某些异常也会显示该路径是有效的,即使目标文件不是. net程序集。

为什么只有加载的程序集需要读权限而不需要依赖的程序集?

因为加载的程序集不控制加载其依赖项的位置,所以仅仅能够加载依赖程序集并不能显示有关特定路径有效性的信息。也就是说,它确实揭示了一些信息,因为. net程序集搜索位置是众所周知的,所以我认为这里的检查应该更强一些。如果您对此有强烈的感觉,您可以在https://connect.microsoft.com/visualstudio/feedback上发布bug报告。