1

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

我阅读了有关JavaTM Scripting API的信息,它可用于评估各种脚本引擎/解释器上的代码,例如 rhino(javascript)、jruby、jython 和 Quercus(php)。是否有可能让单个服务器运行 JVM 来评估多种不同语言的用户代码?这会有效吗?如果不是,我还有什么其他选择?

4

1 回答 1

1

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

是的,这将是可行的。

这会有效吗?

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


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

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

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

  • 或者他们可能会意外地执行上述某些操作。

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


跟进

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

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

但无论哪种方式,你最好把效率问题留到以后。

于 2013-08-24T05:15:35.057 回答