Можно ли разместить .Net DLR в защищенной от идиотов песочнице?

Я хотел бы разместить среду выполнения динамического языка (DLR) таким образом, чтобы пользователи, запускающие в ней произвольные сценарии, не могли остановить процесс?

В спецификации хостинга DLR описано, как разместить DLR в отдельном ApplicationDomain. Это позволяет разорвать и выгрузить среду выполнения скрипта и ограничить определенные операции через CAS (например, я могу ограничить доступ к файловой системе или запретить использование отражения).

Но есть ли также способы, например: - ограничить максимальный объем памяти, используемый сценарием? - ограничить количество потоков, создаваемых скриптом? - обнаруживать зависшие скрипты?

Я думаю, что такой мелкозернистый контроль может быть возможен с помощью неуправляемого API хостинга .net который был разработан для SQL сервера. Это направление? Существуют ли проекты с открытым исходным кодом для такой общей песочницы .net?

Вот несколько потенциально полезных ссылок, которые я нашел:


person blueling    schedule 16.07.2010    source источник


Ответы (1)


Взгляните на Terrarium - это игра, в которой вы создаете своих собственных автономных существ на языке .NET, и они телепортируются на другие сетевые компьютеры вместе со сборками, в которых они описаны. Цель состоит в том, чтобы ваше существо захватило всю экосистему, либо убивая все остальное, либо стратегически управляя пищевыми ресурсами.

Насколько я помню, любое существо, которое тратит более 0,1 секунды на «размышления» или n килобайт памяти, удаляется.

person Rei Miyasaka    schedule 16.07.2010
comment
Очень интересный проект. :-) Я только что загрузил исходный код и сделал очень быстрый обзор: они используют проект на C ++ с собственным кодом под названием asmcheck, чтобы буквально дизассемблировать «сборку существ» и проверить, какие типы .net он использует / к которым обращается. Они используют жестко запрограммированный черный список для запрещенных типов, таких как System.Threading.Thread. Хотя это довольно интересное решение, я думаю, что этот подход нельзя напрямую применить к DLR. - person blueling; 17.07.2010
comment
Действительно? Это вроде как удивительно. Я всегда думал, что они используют CAS: en.wikipedia.org/wiki/Code_Access_Security - person Rei Miyasaka; 17.07.2010