Ищем минимальные разрешения для загрузки сборки в Sandbox AppDomain. Зачем нужны эти разрешения?

Я пытаюсь установить минимальные разрешения для песочницы AppDomain, чтобы загрузить сборку. Кажется, что обязательно иметь разрешение PathDiscovery для appBase и разрешение на чтение для загруженной сборки, но для зависимых сборок разрешение не требуется. Мои вопросы: зачем нам 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);

person nakhli    schedule 10.08.2011    source источник


Ответы (1)


Зачем нам нужен PathDiscovery?

Потому что успешная загрузка сборки по указанному пути покажет, что путь существует. Точно так же некоторые исключения, возникающие при попытке загрузить сборку из пути, также показывают, что путь допустим, даже если целевой файл не является сборкой .NET.

Почему только загруженной сборке требуется разрешение на чтение, а не зависимым?

Поскольку загруженная сборка не контролирует места, из которых загружаются ее зависимости, поэтому простая возможность загрузки зависимой сборки не раскрывает информацию о допустимости определенного пути. Тем не менее, он раскрывает некоторую информацию, поскольку места поиска сборок .NET хорошо известны, поэтому я полагаю, что можно утверждать, что проверка здесь должна быть немного более строгой. Если вам это небезразлично, вы можете опубликовать отчет об ошибке по адресу https://connect.microsoft.com/visualstudio/feedback.

person Nicole Calinoiu    schedule 10.08.2011