C # Load Sandboxed Assembly - PullRequest
       15

C # Load Sandboxed Assembly

7 голосов
/ 01 января 2012

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

Модули - это класс, расширяющий мой класс Module, написанный на .Net.Мне нужно знать, как загрузить эти библиотеки DLL в изолированную среду, позволяя им только чтение / запись в определенных каталогах.

Возможно ли это?

1 Ответ

10 голосов
/ 01 января 2012

Да, это возможно.Использование Code Access Security и .NET Sandbox.Я бы посоветовал вам взглянуть на библиотеку CSScript (с открытым исходным кодом).Это библиотека, которая предоставляет сценарии C # и компиляцию на лету в динамические сборки.Я использовал это в проекте, чтобы позволить конечным пользователям писать сценарии на C # и выполнять их, позволяя взаимодействовать с классами в моей системе.Проект требовал, чтобы у них не было доступа к File IO или MessageBox (UI), поскольку пользовательские сценарии должны были выполняться на сервере.CSSCript использовал элементы .NET Framework для ограничения доступа к сборке, и вы получите исключение, если будет вызван любой из этих запрещенных типов.

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


Хорошо нашел его,Вот обсуждение, которое я провел с автором CSScript несколько лет назад:

Я:

Я занимаюсь разработкой приложения и хочу предоставить пользователям возможность создавать сценарии для определенных действий.через пользовательский интерфейс.CSScript выглядит очень хорошо для этого.Однако я также хочу позволить пользователям делать это и выполнять свои сценарии на веб-сервере.Теперь это кошмар безопасности, поскольку пользователи могут написать «Directory.Delete (@" C: \ », true) и стереть жесткий диск.Так можно ли ограничить сборки, пространства имен или даже классы, к которым пользователь может получить доступ из своего скрипта, для сортировки CSScript в защищенной песочнице?

Олег:

Непосредственным привлекательным решением является использование .NET Sandbox.Он разработан именно для такого рода сценариев. Стандартная песочница CLR доступна для хост-приложения, выполняющего сценарии с CS-Script.Идея состоит в том, что вы инициализируете CAS перед загрузкой подозрительного скрипта, а остальное входит в обязанности CLR.И если вам нужно настроить права доступа к каталогам / файлам, вы делаете это с помощью инструментов CAS.Таким образом, скриптинг - это «транспортировка» для рутины, предоставляемой вашим пользователем.А CS-Script - это удобный механизм для реализации такого транспорта, но фактические проблемы безопасности решаются с помощью .NET Sendoxing, который имеет полный набор функций, охватывающих практически все возможные сценарии безопасности.С помощью загружаемых CS-сценариев вы можете найти образец Sendboxing (\ Samples \ Sandboxing), который демонстрирует, как предотвратить сценарий от операций ввода-вывода из файла (например, создать файл) .

Итак, из этого я считаю, что вам нужно взглянуть на .NET Sandbox и загрузить в него сборки.Я понимаю, что этот пример относится только к C # Scripting, но я верю, что он применим к вашему сценарию, так как приведенные выше примеры CSScript покажут вам способ достижения песочницы и безопасности.

Некоторые конкретные примеры загрузки сборок в изолированную программную среду можно найти здесь:

Пока мы обсуждаем загрузку модуля,слышали о Microsoft Prism ?Это обеспечивает хорошую основу для загрузки модулей и внедрения зависимостей (через Unity или MEF ), что может быть очень полезно при разработке архитектуры плагинов.

С уважением,

...