Какие языки имеют легкодоступные безопасные оценочные среды?

Я имею в виду что-то вроде оценщика make Scheme PLT.

Он будет запускать код схемы, но при определенных условиях:

  • Он использует только определенный объем памяти и прекратит выполнение, если скрипту потребуется больше.
  • Аналогично ведет себя со временем
  • Он ограничивает все операции ввода-вывода, кроме того, что я специально разрешаю в коде.

Кто-нибудь знаком с чем-то еще, что может это сделать?


person Joel McCracken    schedule 26.01.2010    source источник
comment
JavaScript? Однако на практике выделение памяти в JavaScript не ограничено.   -  person Tamas Czinege    schedule 26.01.2010
comment
Обратите внимание, что библиотека песочницы PLT выполняет целую кучу дополнительной работы. Например, модули, которые инициализируют некоторое состояние, будут повторно инициализированы в изолированной среде. Лучший способ увидеть это — определить некоторую структуру foo в модуле, затем использовать make-foo внутри песочницы и проверить значение с помощью foo? вне песочницы — результатом будет #f.   -  person Eli Barzilay    schedule 26.01.2010


Ответы (3)


Lua позволяет легко определять песочницы с любой необходимой вам мощностью.

person Javier    schedule 26.01.2010
comment
Это выглядит намного менее мощным, чем песочница PLT — в частности, без ограничения времени выполнения и памяти все это в конечном итоге не совсем безопасно в том смысле, что позволяет вам запускать произвольный пользовательский код на вашем собственном сервере. Другая проблема заключается в необходимости контролировать ввод-вывод, ограничивая имена в изолированной среде — песочница plt ограничивает ввод-вывод независимо от имен (что позволяет разрешить вход по определенным путям). Кроме того, общение с песочницей через установку значений не кажется слишком привлекательным... - person Eli Barzilay; 27.01.2010
comment
в API C есть хуки, которые можно использовать для ограничения времени и/или памяти, архив списка рассылки может быть лучшим местом для поиска. замена стандартного ввода-вывода на тот, который проверяет правила вашей политики, составляет менее 200 строк Lua. Как и многие другие вещи в Lua, вы должны накатывать свои собственные, но это очень легко сделать. Если вам нужна полностью готовая система, Lua не для вас. - person Javier; 27.01.2010
comment
Я сомневаюсь, что существуют хуки, которые можно использовать для ограничения памяти изолированной среды в среде, не имеющей других ограничений — это намного сложнее, чем несколько хуков. То же самое касается стандартного ввода-вывода — как насчет песочницы, которая может выполнять полный ввод-вывод в один каталог, только для чтения из другого и по сети на один IP-адрес? - person Eli Barzilay; 27.01.2010

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

person Nathan Osman    schedule 26.01.2010

Платформа Java обеспечивает детальное управление доступом и песочницу. Это не совсем эквивалентно make-evaluator, но API позволяет накладывать ограничения на произвольные объекты (через класс GuardedObject). Вы также можете ограничить права доступа к классам, загруженным из определенного источника.

Может быть полезно прочитать Спецификация архитектуры безопасности платформы Java

Обратите внимание, что к API Java можно получить доступ из большинства языков в файле jvm.

person Felix Lange    schedule 04.02.2010