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

213
16 января 2018, 10:13

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

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

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

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

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

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

Answer 1

Да, Unwrap загрузит сборку и в основной домен тоже. Поэтому правильно делается по-другому:

  1. создается в основной, доверенной, сборке класс-наследник MarshalByRefObject;
  2. экземпляр этого класса загружается в новом домене, и ему (доверенному экземпляру) делается Unwrap;
  3. все дальнейшее взаимодействие с объектами в новом домене делается через этот объект.

Для ситуации плагинов имеет смысл для каждого интерфейса, который может быть плагином реализован, подготовить свой кросс-доменный прокси для загрузки в домене плагина. В простейшем случае такой прокси будет просто делегировать все вызовы:

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;
    }
}
READ ALSO
Как прочесть Json файл в Unity3d для Android

Как прочесть Json файл в Unity3d для Android

Есть следуюший код для чтения файла:

239
How use proxy in smtpclient(С#)?

How use proxy in smtpclient(С#)?

Приветствую, подскажите пожалуйста каким образом можно подключить прокси (http\s | socks4\5)Имеется вот такой метод:

225
Замена document.ready [дубликат]

Замена document.ready [дубликат]

На данный вопрос уже ответили:

228
Как сохранить store redux в localstorage

Как сохранить store redux в localstorage

Добрый день, подскажите, как добавить store redux в localstorage (на данный момент обнуляется при перезагрузке): store:

317