Да, это возможно.Использование 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 ), что может быть очень полезно при разработке архитектуры плагинов.
С уважением,