Scala / Java沙箱用于不受信任的代码

6

我希望允许用户从浏览器客户端提交Java / Scala源代码,并在服务器上编译/执行它。但同时,我希望限制用户在服务器上运行潜在恶意的代码。

例如,我想禁止提交的源代码访问文件系统以及入站/出站网络访问。我还应该限制什么?

哪些Java / Scala库应该明确禁止客户端使用?例如,这是我的被禁止的API /库列表:

java.lang.System
java.lang.Runtime
java.io.*
java.nio.*
scala.io.*
java.net

我应该如何正确地对不受信任的Java/Scala代码进行沙箱处理?


我可能错了,但首先,你应该实现一个“白名单”,其次,禁止API可能不够。但是,关于这个维度,我对整个范围不确定。 - Lucio
3
我会采用“隔离环境方法”。也就是说,不限制可用的代码或软件包,但限制环境——即没有(或有限/虚拟化的)文件系统访问权限,没有(或有限/虚拟化的)网络访问权限。虽然这并未解答如何创建此类受限环境的问题,但我认为这是在线“代码片段/执行”服务的明智做法。 - user2864740
@user2864740 + 禁止使用诸如 System.exit() 的东西。 - om-nom-nom
1个回答

3
JVM运行时可以通过提供策略文件进行限制。然而,Java并非完美无缺,因此您最好在操作系统级别上限制运行JVM的帐户。
如果您允许终端用户在服务器上编译Scala代码,则编译器可能会执行宏代码,这是一个额外的攻击面。Scalac可能没有被设计来防止恶意宏。Scalac本身在JVM内部运行,因此也可以类似地被沙盒化。 这个问题与您的问题非常接近。

嗨,@Mark Lister,你能否提供一些关于在操作系统级别限制JVM权限的更多信息? - NehaM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接