Я провожу мысленный эксперимент, который, судя по другим вопросам, в конце концов не так уж нов, но я все равно продолжу. Я хочу изолировать предоставленный пользователем серверный сценарий, помимо прочего, ограничив его виртуальной файловой системой и установив корневой каталог, а затем сопоставив некоторые виртуальные каталоги с конкретными физическими, несовместимыми с реальной структурой каталогов. Например (используя синтаксический анализ строк 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 станет платформой для реализации, а не изолированной, основываясь на моих вопросах и ответах. Я немного удивлен, увидев это в ответах, но в любом случае работает.