【问题标题】:Java sandbox for running multiple JVM platform languages用于运行多种 JVM 平台语言的 Java 沙箱
【发布时间】:2013-08-24 04:13:56
【问题描述】:

我目前正在评估构建一个小型 Web 应用程序的项目的可行性,该应用程序提供类似于 tryrubycodeacademy 的 REPL 编程环境,并且一直在寻找可能的解决方案来安全地评估用户提交的代码,关于服务器端解决方案,我读到 JVM 提供了最好的沙盒环境,因为它内置在 security measures 中。

我读到了JavaTM Scripting API,它可用于评估various script engines/ interpreters 上的代码,例如rhino(javascript)、jruby、jython 和Quercus(php)。是否有可能让单个服务器运行 JVM 来评估多种不同语言的用户代码?这会有效吗?如果没有,我还有什么其他选择?

【问题讨论】:

    标签: java jvm jruby jython sandbox


    【解决方案1】:

    是否可以让一个运行 JVM 的服务器来评估多种不同语言的用户代码?

    是的,这是可行的。

    这会有效吗?

    我不确定为什么效率是一个特别关注的问题。让我印象深刻的是,为远程用户运行小示例并不需要效率。无论哪种方式,我的看法是它应该足够高效


    然而,真正令人担忧的是,这种服务会招致各种滥用:

    • 人们可能倾向于尝试破坏您的沙盒。如果您没有正确实施它(或者如果他们可以利用一些未修补的安全漏洞),他们可能会成功,并进入您系统的其余部分。

    • 人们可能倾向于发起拒绝服务攻击。安全沙箱无法处理各种事情;例如创建大型数据结构以触发 GC 过载和 OOME,创建大量线程、无限循环。

    • 或者他们可能不小心做了上述的一些事情。

    如果您实现了与您提议的服务类似的服务,您将需要一种策略来处理这些事情。


    跟进

    关于效率的评论,我的想法是,将整个解释器加载到内存中可能只写一行代码,可能不是最好的方法吗?

    在基于 JVM 的语言上实现服务的正常方式是在同一个 JVM 实例中运行多个请求。如果你在这里这样做,你就不会每次都加载解释器。你只是重新初始化它。

    但不管怎样,你最好把效率问题留到以后。

    【讨论】:

    • 嗨@StephenC 感谢您的回复,我确实需要考虑您提到的问题,这些非常有帮助。关于效率的评论,我的想法是,将整个解释器加载到内存中可能只写一行代码,可能不是最好的方法吗?
    猜你喜欢
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2013-07-15
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多