2009-12-14 2 views
1

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

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

ответ

1

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

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

код будет что-то вдоль этих линий:

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

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

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

+0

Приятно знать, что есть другой способ. +1 – BuddyJoe