Ищем минимальные разрешения для загрузки сборки в 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);

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам