用于运行多种 JVM 平台语言的 Java 沙箱 | 珊瑚贝

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 实例中运行多个请求。如果你在这里这样做,你就不会每次都加载解释器。你只是在重新初始化它。

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

  • 嗨@StephenC 感谢您的回复,我确实需要考虑您提到的问题,这些非常有帮助。关于效率的评论,我的想法是,将整个解释器加载到内存中可能是一行代码,可能不是最好的方法吗?


来源:https://www.codenong.com/18414852/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9776.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?