Java sandbox for running multiple JVM platform languages
我目前正在评估构建一个小型 Web 应用程序的项目的可行性,该应用程序提供类似于 tryruby 和 codeacademy 的 REPL 编程环境,并且一直在寻找可能的解决方案来安全地评估用户提交的代码,关于服务器侧面解决方案 我读到 JVM 提供了最好的沙盒环境,因为它内置了安全措施。
我了解了 JavaTM Scripting API,它可用于评估各种脚本引擎/解释器上的代码,例如 rhino(javascript)、jruby、jython 和 Quercus(php)。是否有可能让单个服务器运行 JVM 来评估多种不同语言的用户代码?这会有效吗?如果没有,我还有什么其他选择?
Would it be possible to have a single server running the JVM to evaluate user code in serval different languages?
是的,这是可行的。
Would this be at all efficient?
我不确定为什么效率是一个特别关注的问题。让我印象深刻的是,为远程用户运行小示例并不需要效率。无论哪种方式,我的看法是它应该足够高效。
然而,真正令人担忧的是,这种服务会招致各种滥用:
-
人们可能倾向于尝试破坏您的沙盒。如果您没有正确实施它(或者如果他们可以利用一些未修补的安全漏洞),他们可能会成功,并进入您系统的其余部分。
-
人们可能倾向于发起拒绝服务攻击。有很多事情是安全沙箱无法处理的;例如创建大型数据结构以触发 GC 过载和 OOME,创建大量线程,无限循环。
-
或者他们可能会不小心做了上述的一些事情。
如果您实现了与您提议的服务类似的服务,您将需要一种策略来处理这些事情。
跟进
Regarding the comment on efficiency, my thought was that loading an entire interpreter into memory for possibly a single line of code, may not be the best approach to take?
在基于 JVM 的语言上实现服务的正常方式是在同一个 JVM 实例中运行多个请求。如果你在这里这样做,你就不会每次都加载解释器。你只是在重新初始化它。
但不管怎样,你最好把效率问题留到以后。