2013-07-29 4 views
1

Я хочу создать режим песочницы в моем приложении C#. Мне нужно загрузить DLL в свой пользовательский или пользовательский домен приложения, а затем выполнить из него метод.Загрузить dll в пользовательском appdomain в C#

Мне нужно убедиться, что приложение не может получить доступ к каким-либо системным ресурсам (hdd и т. Д.). Он должен жить и умирать в своей памяти.

Thanks

+0

вы можете использовать это - http://stackoverflow.com/questions/6578170/using-appdomain-in-c-sharp-to-dynamically-load-and-unload-dll –

+0

Я считаю, что это будет связано с множеством кода. Для части загрузки DLL вы можете использовать Reflection, искать динамическую загрузку DLL и выполнять методы. Для части безопасности вы можете проверить SecurityModel для .NET 4.0 esp. где хост может ограничиться доступом к другим ресурсам. Что касается AppDomain, вы можете создавать и обмениваться ресурсами. –

ответ

2

См. Эту статью.

В основном вам нужно создать AppDomain, который использует пользовательский PermissionSet ... который позволяет блокировать подобные вещи приложения .NET имеет разрешение делать.

Существуют различные способы его создания.

Вы можете использовать предопределенную, определенную существующей зоной группы кода (Интранет, Интернет, MyComputer и т. Д.), Или вы можете создать свой собственный.

Это можно сделать программно, или это можно сделать с помощью caspol.exe.

При создании этого вторичного AppDomain это фактически «живет» в рамках одного процесса Windows, в качестве приложения .... NET только обеспечивает «изоляцию» слой, который сохраняет каждый AppDomain отделено. Если вы ультра параноидны и не доверяете этому изолирующему слою, тогда вы можете создать новый процесс Windows и запустить свою DLL внутри этого ... хотя это может занять некоторое время.

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

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

Если у вас есть чувствительную информацию, которую вы хотите свести к минимуму, чтобы быть открываемым (например, кем-то, кто тратит через память), затем используйте SecureString.

Если вы хотите, чтобы предотвратить какие-либо из вашей «код» или «данные» быть выгружен на диск (в файл подкачки), то вы можете использовать пользовательские CLR хоста так, чтобы он сохраняет все в физической памяти.