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

Я пытаюсь установить минимальные разрешения для песочницы 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 Ответ

4 голосов
/ 10 августа 2011

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

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

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

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

...