用于运行多种JVM平台语言的Java沙箱

时间:2013-08-24 04:13:57

标签: java jvm jruby jython sandbox

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

我读到JavaTM Scripting API并且它可用于评估various script engines/ interpreters上的代码,例如rhino(javascript),jruby,jython和Quercus(php)。是否可以让一台服务器运行JVM来评估serval不同语言的用户代码?这会有效吗?如果不是我还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

  

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

是的,这是可行的。

  

这会有效吗?

我不确定效率是一个特别值得关注的问题。令我感到震惊的是,为远程用户运行小例子并不需要效率。无论哪种方式,我认为它应该足够有效


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

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

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

  • 或者他们可能会意外地做上述事情。

如果您实施的服务类似于您提议的服务,则需要采取策略来处理这些事情。


<强>后续

  

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

在基于JVM的语言上实现服务的正常方法是在同一JVM实例中运行多个请求。如果您在此处执行此操作,则每次都不会加载解释器。你只需要重新初始化它。

但不管怎样,你最好将效率问题留待以后使用。