【问题标题】:Are there any sandboxable scripting engines which can be integrated with PHP/Python/other?是否有任何可以与 PHP/Python/其他集成的沙盒脚本引擎?
【发布时间】:2011-03-09 06:08:39
【问题描述】:

我正在做一个思想实验,从其他问题来看,它毕竟不是那么新颖,但我想我还是会继续。我想通过将用户提供的服务器端脚本沙箱化,除其他外,将其限制在虚拟文件系统并设置根目录,并进一步将某些虚拟目录映射到特定的物理目录,这与实际目录结构不一致。例如(使用 PHP 字符串解析),我的先入之见是“~$user/...”,但语义较少的“/$user/...”也可以正常工作;要么映射到“users/$user/$script_name/data/...”。是的,在某些情况下,脚本可能会影响多个用户。

由于这是一个思想实验,因此我不认为实现语言是一个问题,我希望在我的本地主机上执行此操作,并且宁愿使用 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,或者不太可能转向 Mono,但我对这个想法并不热衷。 (我对 Java 非常生疏,几乎没有在服务器端使用过它。Mono 对我来说完全陌生。)

由于它们是迄今为止最有前途的选择,我还想知道 Java 和 Mono 中的沙盒工具有多广泛。例如,他们可以做虚拟文件系统吗?将来自 Java 用户代码的 API 输入引擎?是否为脚本提供了任何标准 API,如果有,是否可以将其删除?

澄清 我真的不在乎这是哪条路,但根据我链接的问题和答案,我实际上希望 Java/Mono 成为实现平台,而不是沙盒平台。看到答案出现反转,我有点惊讶,但无论哪种方式都有效。

【问题讨论】:

  • PHP (pecl)Python 有一个蜘蛛猴扩展;不确定他们提供了多少限制。
  • 我知道我看过 PHP 的,不知道为什么我没有检查 PECL。谢谢!我想我必须破解他们才能让他们做我想做的事,但至少这是这样的。 (您可能希望将其作为答案,而不仅仅是评论。)

标签: java php python mono security


【解决方案1】:

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

一般来说,Java 安全模型在大多数情况下对安全管理器只有“允许或不允许”的决定。

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

【讨论】:

    【解决方案2】:

    我从未尝试过真正将 Mono 沙盒化,但这可能会给你一个起点:

    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

    【讨论】:

    • 看起来很有希望!老实说,我并不关心哪种语言被沙盒化,所以如果我的想法付诸实施,Mono 可以为用户提供灵活性。
    • @Jesdisciple - 很高兴为您提供帮助。不要害怕为你喜欢的答案投票。
    猜你喜欢
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2020-08-06
    • 2012-07-10
    • 2013-08-29
    相关资源
    最近更新 更多