我是Robocode引擎的开发人员。我们想让 Robocode 多语言和 Scala 看起来很相配。我们在这里有 Scala 插件原型。
问题: 因为用户是有创造力的程序员,他们可能会尝试以不同的方式赢得战斗。机器人也是从在线数据库下载的,任何人都可以上传。因此,安全漏洞可能会导致用户计算机的安全漏洞。用 Java 编写的机器人在受限沙箱中运行。几乎所有东西都被禁止[网络、GUI、磁盘(受限)、线程(受限)、类加载器和反射]。沙盒类似于浏览器小程序。我们使用 SecurityManager、每个机器人的自定义 ClassLoader等...
在 Robocode 中托管 Scala 运行时有两种方法:
1)将其与沙箱内的机器人一起加载。对我们来说非常安全,首选的解决方案。但它会损害 Scala 运行时的能力,因为运行时使用反射。也许在运行时生成类?使用线程做一些内部清理?访问 JVM/内部 ? (我不想限制语言能力)
2) 使用 Scala 运行时作为可信代码,开箱即用,安全性与 JDK 相同。对(恶意)机器人的可见性。Scala 运行时 API 安全吗?他们有保安的方法吗?有安全模式吗?Scala 运行时中是否有任何单例,可以被滥用在机器人之间进行通信?任何可以模拟线程的并发/线程池/消息传递?(Scala 运行时是否有任何安全审计?)
3)介于两者之间,一些运行时类和一些运行时类。哪些类/包必须对机器人可见/哪些只是私有实现?(这似乎是未来的解决方案)
问题: 是否可以枚举和隔离必须在受信任范围内运行的运行时部分与其余部分?具体的包和类?还是更好的主意?
我正在寻找具体的答案,这将导致安全的解决方案。欢迎随意的想法,但没有奖励。scala 电子邮件组正在进行讨论。还没有具体的答案。