Страницы

Поиск по вопросам

среда, 4 марта 2020 г.

Домены приложений и безопасность

#c_sharp #net


В доменах приложений есть такая штука, как политики, которые позволяют ограничить
домен в правах.

Например, запретить доступ к файловой системе.

Однако, работает ли это на практике?

Разве, когда делается Unwarp, то сборка из домена не загружается в основной домен?

=> если сборка вредоносная, то можно запихать в статический конструктор какую-то
гадость, например format c => безопасность рушится, даже если домен был ограничен в правах.

Или не все так просто, или с доменами работают по другому?
    


Ответы

Ответ 1



Да, Unwrap загрузит сборку и в основной домен тоже. Поэтому правильно делается по-другому: создается в основной, доверенной, сборке класс-наследник MarshalByRefObject; экземпляр этого класса загружается в новом домене, и ему (доверенному экземпляру) делается Unwrap; все дальнейшее взаимодействие с объектами в новом домене делается через этот объект. Для ситуации плагинов имеет смысл для каждого интерфейса, который может быть плагином реализован, подготовить свой кросс-доменный прокси для загрузки в домене плагина. В простейшем случае такой прокси будет просто делегировать все вызовы: class FooCrossDomainProxy: MarshalByRefObject, IFoo { private readonly IFoo target; public void FooCrossDomainProxy(IFoo target) { this.target = target; } public void Bar() => target.Bar(); } В более сложном случае этому прокси можно поручить адаптацию интерфейса к кросс-доменному взаимодействию. К примеру, поскольку вызовы между доменами медленные - имеет смысл снижать их число путем объединения методов: class FooCrossDomainProxy: MarshalByRefObject { private readonly IFoo target; public void FooCrossDomainProxy(IFoo target) { this.target = target; } public bool TryBar() { if (!target.CanBar) return false; target.Bar(); return true; } }

Комментариев нет:

Отправить комментарий