【发布时间】:2014-04-14 00:56:58
【问题描述】:
我正在开发一个允许用户执行自定义 Scala 代码的在线环境(将其视为持续集成)。但是,我想阻止他们做某些事情,尤其是文件 I/O 和网络调用。我将通过我将公开的库来允许这些函数的有限形式。
天真的方法是简单地将/^import.*$/ 替换为空字符串。然而,有很多方法可以让邪恶的人通过类加载器等来解决这个问题。我希望用户只能访问预先选择的进口“白名单”,而不必依赖(可能不完整的)黑名单。
我还没有决定是否要在底层操作系统上调用scalac 和他们的文件,或者是否使用IMain 来解释文本。显然,如果一种方法使我想要的结果可行,我会选择那个。 奖励积分如果您的答案包括
如何有效地沙箱化我的用户代码?
【问题讨论】:
-
感谢您提出这个问题(4 多年前)。我有类似的需求,确保两个创建 JSON 的库(Casbah 和 spray.json)不会被意外导入同一个范围(这会导致问题)。所以本质上,我是在试图保护自己免受自己的伤害。 :)
标签: scala