Контролируемое выполнение пользовательского скрипта в .net framework - PullRequest
0 голосов
/ 20 февраля 2019

Мои пользователи хотят написать и добавить « хранимые процедуры » (не SQL) в нашу систему.Эти процедуры содержат пользовательскую логику в пользовательских функциях , работают с объектами памяти, используют сложные структуры данных , такие как списки, структуры, словари.Сценарии создают XML-файлы в памяти.

Сценарии не проверяются другими пользователями - подсистема выполнения должна гарантировать, что сценарий не сможет причинить вред серверу .Недопустимо, чтобы скрипт обращался к внешним ресурсам (файловая система, база данных sql и т. Д.), Но должен использовать общедоступный API приложения - лучший способ - использовать методы экземпляров пользовательских объектов.Таким образом, сценарии должны сообщать об окружающей среде во время выполнения, но только контролируемым образом.Не может съесть всю память, не может работать вечно.

Сценарии могут записывать выходные сообщения, которые должны быть записаны и отображены.Было бы счастьем, если есть способ как-то отладить выполнение скрипта.

Я новичок в этом проблемном пространстве.Язык сценария не указан, может быть python, powershell, C # script, что угодно.Я нашел CSharpScript (https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples) во время фазы исследования, но я не уверен, что это будет лучшим выбором. Кто-нибудь знает, с чего лучше начать? Как мы должны решить эту проблему - как мы не хотимнаписать язык сценариев, определить синтаксический анализатор и выполнить скрипт самостоятельно. Спасибо за предложение!

1 Ответ

0 голосов
/ 19 марта 2019

Как оказалось, Roslyn (анализ кода Microsoft) - это хорошая возможность для компиляции и сборки сборки, тогда объединение с другими внешними DLL-библиотеками легко.Используя отражение, сценарии могут быть запущены, поэтому выполнение может быть инициировано.

Но управление временем выполнения, ограничение использования ресурсов (память, процессор, ...), ограничение доступа к внешним ресурсам (диск,сеть, БД, ...) не простая задача.

...