【问题标题】:Prevent imports of unauthorized classes in Scala防止在 Scala 中导入未经授权的类
【发布时间】:2014-04-14 00:56:58
【问题描述】:

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

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

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

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

【问题讨论】:

  • 感谢您提出这个问题(4 多年前)。我有类似的需求,确保两个创建 JSON 的库(Casbah 和 spray.json)不会被意外导入同一个范围(这会导致问题)。所以本质上,我是在试图保护自己免受自己的伤害。 :)

标签: scala


【解决方案1】:

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

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

对于 Scala 编译时沙盒,我不得不推迟。但是,我想知道您是否需要它。如果唯一尝试使用禁止 API 的人是那些试图闯入您的系统的人,那么没有理由通过提供编译时检查来简化他们的工作。

【讨论】:

  • 哇,我从来没有想过这个问题已经在 J​​ava 中出现并且已经解决了。很好的一点是,这是一个 JVM 问题,而不是真正的 Scala 特定问题。感谢您为我指明正确的方向!
  • @RyanMuller - Java 早期杀手级应用程序之一是 Java 小程序 - 可下载的基于浏览器的沙盒 Java 应用程序。请注意,他们未能茁壮成长的一个主要原因是他们在安全方面建立了非常糟糕的声誉;很难兼顾功能和安全性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
相关资源
最近更新 更多