2011-03-06 65 views
2

我正在进行一个思考实验,根据其他问题来判断,毕竟不是那么新颖,但我想我会继续。我希望通过将用户提供的服务器端脚本限制为虚拟文件系统并设置根目录,并将某些虚拟目录进一步映射到特定的物理目录,这与实际的目录结构不一致。例如(使用PHP字符串解析),我的偏见是“〜$ user/...”,但语义较少的“/ $ user/...”也可以正常工作;可能会映射到“users/$ user/$ script_name/data/...”。是的,在某些情况下,多个用户可能会受到脚本的影响。是否有任何可与PHP/Python /其他集成的沙盒脚本引擎?

由于这是一个思想实验,因此我不考虑实现语言的问题,我期望在我的本地主机上执行它,宁愿使用PHP而不是安装其他东西。 (我也有Python 2可用,并且可以使用mod_wsgi来替代它,如果必须的话,我会安装Python 3)。理想情况下,我希望PEAR模块能够做到这一点 - 但从我看不到的东西中可以看到。

我试过并未能找到一个服务器模块,如SSJS,可以实现这一点。我发现的最接近的答案是< < Looking for a locked down script interpreter >>和< < Allowing users to script inline, what inline scripting engines are there for either .net or java? >>。如果我绝对需要的话,我会转向Java或更不可能的单声道,但我对这个想法并不热心。 (我在Java上非常生疏,几乎没有使用它在服务器端,单声道对我来说是完全陌生的。)

因为它们是迄今为止最有希望的选项,所以我也想知道沙盒设施在Java和Mono。例如,他们可以做虚拟文件系统吗?从Java用户代码输入API到引擎中?是否有任何标准API提供给脚本,如果可以的话,它们可以被删除?

澄清 我真的不关心这个去哪个方向,但我其实期望的Java /单声道是实现平台,而不是沙盒一个,基于问题&答案我联系。我有点惊讶,看到翻转的答案,但任何一种方式的作品。

+0

[PHP(pecl)](http://pecl.php.net/package/spidermonkey)和[Python]有一个spidermonkey扩展(http://pypi.python.org/pypi/python-蜘蛛猴);不知道他们提供多少禁闭。 – mario 2011-03-06 21:31:53

+0

我知道我看过PHP,不知道为什么我没有检查PECL。谢谢!我想我必须破解他们才能让他们做我想做的事,但至少这是事情。 (你可能想做出这个答案而不仅仅是一个评论。) – Grault 2011-03-08 16:31:33

+0

http://niemeyer.net/lunatic-python – 2011-03-08 22:15:52

回答

1

Java沙箱(以为浏览器applet实现的方式)根本不提供文件访问。

通常,在大多数情况下,Java安全模型只对安全管理器“允许或不允许”做出决定。

当然,您可以设计另一个API而不是普通的File IO api(以及类似的),然后以这种方式访问​​您的沙盒脚本(并且禁止安全管理器以正常方式访问)。 (我猜想其中的一些已经在市场上的Java应用程序引擎中实现了,但我对此一无所知)。

+0

好的,这绝对是要搜索的东西。谢谢。 :) – Grault 2011-03-08 16:41:11

1

我从来没有试图真正沙箱单,但这可能给你一个起点:

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

在沙箱中的文件系统访问该链接触及。

Mono scripting的热门选项似乎是BooPython。这两款产品都附带最新版本的Mono(2.10)。 Visual Basic,RubyF#(OCaml-ish)也是如此。

Mono C# compiler可以很容易地嵌入作为脚本服务。这是一个nice article about it

如果您不满意PHP,那么您应该查看Phalanger

还有很多其他的选择。有一些新的基于.NET的脚本语言。我今天早些时候遇到了this one

+0

看起来很有希望!说实话,我并不在乎哪种语言是沙盒,所以如果我的想法能够实现,Mono可以给用户带来灵活性。 – Grault 2011-03-08 16:36:08

+0

@Jesdisciple - 很高兴帮助。不要害怕投票选出你喜欢的答案。 – Justin 2011-03-08 22:11:53