Безопасный язык программирования/среда программирования с возможностью песочницы?

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

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

Как правило, сценарии будут очень простыми (например, создать сумму или среднее значение значений, соответствующих определенным критериям), и они часто будут использоваться в шаблонах (например, заполнить значение этой ячейки или элемента html средним или сумма).

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

Языки должны поддерживать создание DSL и библиотек.

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

Любые идеи или рекомендации по языку и технологии? Какие-нибудь примеры других, пытающихся это сделать, а также успехов и неудач, с которыми они столкнулись?


person Parand    schedule 17.12.2008    source источник
comment
У меня есть несколько идей веб-приложений, где это основная концепция. Положительные баллы за методы, использующие не-DSL языки, такие как Python, с изолированной программной средой на низком уровне, то есть с доступом к основным библиотекам без системных вызовов. Можно ли запускать код в ограниченных учетных записях пользователей?   -  person Daniel Naab    schedule 17.12.2008
comment
Под ограниченными учетными записями пользователей вы подразумеваете настоящие учетные записи Unix? Если да, то, вероятно, нет. Что вы используете для песочницы?   -  person Parand    schedule 17.12.2008
comment
Ничего, никакого опыта. Просто интересны варианты.   -  person Daniel Naab    schedule 17.12.2008
comment
@Parand - что вы нашли для решения своей проблемы?   -  person z8000    schedule 04.06.2009
comment
Брайан, я не нашел рабочего решения. Песочница PyPy (codespeak.net/pypy/dist/pypy/doc/sandbox.html) выглядел многообещающе, как и одна из фреймворков javascript на стороне сервера (думаю, это был Rhino), но я не дошел до фактической реализации, поэтому не знаю, насколько хорошо они работают.   -  person Parand    schedule 04.06.2009


Ответы (1)


Я использую для этого Lua, но он предназначен для сообщества, поддерживающего Lua. Итак, мой ответ: кто ваши пользователи?

Если ваши пользователи являются внутренними, как в моем случае, и хорошо разбираются в Python, используйте Python. Однако, если это что-то для всемирной паутины, я бы, вероятно, выбрал javascript, потому что это лингва-франка (каждый разработчик знает его, и его легко подобрать). Что касается движка... ну, V8 был бы хорош, но он не на 100% безопасен для потоков, поскольку вы не можете запускать несколько движков в одном и том же процессе без блокировок, как вы можете с SpiderMonkey. Так что вы можете использовать это. Кроме того, поскольку javascript по умолчанию изолирован, вам не придется беспокоиться о реализации на вашей стороне.

person Robert Gould    schedule 17.12.2008