防止在Scala中导入未经授权的类

时间:2014-03-10 18:29:05

标签: scala

我正在开发一个允许用户执行自定义Scala代码的在线环境(将其视为持续集成)。但是,我想阻止他们做某些事情,最明显的是文件I / O和网络调用。我将允许这些函数的有限形式与我将公开的库。

天真的方法是简单地用空字符串替换/^import.*$/。然而,对于邪恶的人来说,有很多方法可以解决这个问题,包括类加载器等。我希望用户只能访问预先选择的“白名单”导入,而不必依赖(可能不完整)黑名单。

我还没有决定是否要在底层操作系统上使用他们的文件调用scalac,或者是否使用IMain来解释文本。显然,如果一种方法使我想要的结果可行,我会选择那个。 奖励积分,如果您的答案包含

的方法

如何有效地沙箱化用户代码?

1 个答案:

答案 0 :(得分:3)

有两个不同的问题:编译时和运行时沙盒。

运行时沙盒可以通过使用Java安全性和类加载器限制来完成 - 请参阅例如How do I create a Java sandbox?,更加谨慎,Can I trust Java SecurityManager sandbox?。关于这个话题还有更多内容!

对于Scala编译时沙箱,我不得不推迟。但是,我想知道你是否需要它。如果只有那些尝试使用禁用API的人是那些试图侵入你的系统的人,那么没有理由通过提供编译时检查来使他们的工作变得更容易。