Существуют ли какие-либо скриптовые движки для песочницы, которые можно интегрировать с PHP / Python / прочим? - PullRequest
2 голосов
/ 07 марта 2011

Я провожу мысленный эксперимент, который, судя по другим вопросам, в конце концов не так уж нов, но я все равно продолжу. Я хочу изолировать предоставленный пользователем серверный сценарий, помимо прочего, ограничив его виртуальной файловой системой и установив корневой каталог, а затем сопоставив некоторые виртуальные каталоги с конкретными физическими, несовместимыми с реальной структурой каталогов. Например (используя синтаксический анализ строк PHP), мое предвзятое мнение - «~ $ user / ...», но менее семантическое «/ $ user / ...» также будет работать нормально; любой из них может отображаться в «users / $ user / $ script_name / data / ...». Да, при определенных обстоятельствах сценарий может повлиять на нескольких пользователей.

Поскольку это мысленный эксперимент, и поэтому я не рассматриваю язык реализации как проблему, я ожидаю сделать это на своем локальном хосте и предпочел бы использовать PHP, а не устанавливать что-то еще. (У меня также есть Python 2, и я мог бы заставить mod_wsgi использовать его вместо этого. Я бы установил Python 3, если бы мне пришлось.) В идеале, я хотел бы, чтобы модуль PEAR делал это - но из того, что я вижу, никто не делает.

Я попытался и не смог найти серверный модуль, такой как SSJS, который мог бы выполнить это. Из ответов, которые я нашел, наиболее близкими были << <a href="https://stackoverflow.com/questions/5095988/looking-for-a-locked-down-script-interpreter"> Поиск заблокированного интерпретатора сценариев >> и << <a href="https://stackoverflow.com/questions/1970195/allowing-users-to-script-inline-what-inline-scripting-engines-are-there-for-eith"> Разрешение пользователям создавать встроенные сценарии, какие механизмы встроенных сценариев существуют для .net или java ? >>. Я перейду на Java или, что менее вероятно, в Mono, если мне абсолютно необходимо, но я не в восторге от этой идеи. (Я очень хорошо разбираюсь в Java и почти не использую его на стороне сервера. Mono мне совершенно чужд.)

Так как они являются наиболее многообещающими вариантами, мне также интересно, насколько обширны возможности песочницы в Java и Mono. Например, могут ли они делать виртуальные файловые системы? Вводите API-интерфейсы из пользовательского кода Java в движок? Предлагаются ли в сценарии какие-либо стандартные API-интерфейсы, и если да, то могут ли они быть удалены?

Разъяснение Мне все равно, в каком направлении это будет происходить, но я ожидал, что Java / Mono станет платформой для реализации, а не изолированной, основываясь на моих вопросах и ответах. Я немного удивлен, увидев это в ответах, но в любом случае работает.

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Я никогда не пытался по-настоящему песочницей Mono, но это может дать вам отправную точку:

http://www.mono -project.com / MonoSandbox

Доступ к файловой системев песочнице эта ссылка затрагивается.

Популярные варианты для Моно-скриптинг кажутся Boo и Python .Оба поставляются с последней версией Mono ( 2.10 ). Visual Basic, Ruby и F # (OCaml-ish) также подходят.

Компилятор Mono C # можетбыть легко встроенным в качестве службы для сценариев.Вот хорошая статья об этом .

Если вы неравнодушны к PHP, вы должны проверить Phalanger .

Есть много других вариантов,Все время появляются новые языки сценариев на основе .NET.Я встречал этот сегодня раньше.

1 голос
/ 07 марта 2011

Песочница Java (в том виде, в каком она реализована для апплетов браузера) вообще не предлагает доступа к файлам.

В общем, модель безопасности Java имеет только «разрешать или не разрешать» решения для менеджера безопасности вв большинстве случаев.

Конечно, вы могли бы разработать другой API вместо обычного API-интерфейса File IO (и аналогичного) и таким образом получить доступ к вашему изолированному сценарию (и запретить обычным способом менеджер безопасности).(Я полагаю, что некоторые из них уже реализованы в движках приложений Java на рынке, но я ничего об этом не знаю).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...