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