Загрузить сборку с более низкими привилегиями - PullRequest
1 голос
/ 14 декабря 2009

Какой самый простой способ загрузить сборку, создать из нее экземпляр класса, но сделать это так, чтобы сборка имела ограниченные привилегии (изолированную среду)? Код не должен быть в состоянии обмениваться данными по сети, писать в файловую систему или выполнять процессы.

UPDATE Я просто наткнулся на Assembly.LoadFrom (строка assemblyFile, Доказательства securityEvidence) Можно ли это вообще использовать? Не уверен, что я под этим вещественным доказательством.

Ответы [ 2 ]

3 голосов
/ 14 декабря 2009

Вам нужно загрузить его в свой собственный AppDomain .

Вот статья , описывающая весь процесс .

1 голос
/ 15 декабря 2009

Другим вариантом, но не на 100% надежным, было бы полагаться на то, что CAS отказывает токенам в стеке вызовов.

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

код будет выглядеть примерно так:

[SecurityPermission(SecurityAction.Deny, Flags = SecurityPermissionFlag.NoFlags ^ SecurityPermissionFlag.Assertion)]
void CallExternalAssemblyClass(ExternalClass c)
{
    c.SomeMethod();
}

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

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

...