加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala运行时的安全性

发布时间:2020-12-16 09:19:35 所属栏目:安全 来源:网络整理
导读:我是 Robocode发动机的开发人员.我们想制作Robocode 多语言和Scala似乎是很好的搭配.我们有Scala插件 prototype here. 问题: 因为用户是创意的程序员,他们可能会尝试赢得战斗 不同的方式.机器人也从在线数据库下载 任何人都可以上传一个.所以安全漏洞可能导
我是 Robocode发动机的开发人员.我们想制作Robocode
多语言和Scala似乎是很好的搭配.我们有Scala插件 prototype here.

问题:
因为用户是创意的程序员,他们可能会尝试赢得战斗
不同的方式.机器人也从在线数据库下载
任何人都可以上传一个.所以安全漏洞可能导致安全
孔进入用户电脑.使用Java编写的机器人正在运行
限制沙箱.几乎一切都是禁止的[网络,GUI,
磁盘(有限),线程(有限),类加载器和反射].该
沙盒类似于浏览器小程序.我们使用SecurityManager,自定义
ClassLoader每个机器人,etc …

在Robocode中托管Scala运行时有两种方式:

1)将其与沙箱内的机器人一起加载.对我们来说很安全,
首选解决方案.但它会损害Scala运行时的能力,因为运行时使用反射.也许在运行时生成类?使用线程做一些内部清理?访问JVM /内部(我不想限制语言的能力)

2)使用Scala运行时间作为受信任的代码,在框外,安全性
与JDK相同. (恶意)
机器人. Scala运行时API是否安全?做方法有安全性
守卫?有没有安全模式?在Scala运行时有任何单例,
可能会滥用机器人之间的沟通?任何可以模拟线程的concurency / threadpool /消息传递? (Scala运行时是否有安全审核?)

3)之间的某些东西,一些类的运行时和一些.哪些类/包必须对机器人可见,哪些只是私有实现? (这似乎是未来的解决方案)

问题:
是否可以枚举和隔离必须运行的运行时部分
值得信赖的范围从其余的?具体的包和类?还是更好的主意?

我正在寻找具体的答案,这将导致安全的解决方案.随机的想法欢迎,但没有授予. scala email group正在进行讨论.没有具体的答案.

解决方法

我认为#1是你最好的选择,即使是一个移动的目标.如邮件列表所示,结构类型使用反射.我不认为结构类型在标准库中是常见的,但我不认为有人跟踪它们在哪里.

还有一些可能性,在幕后还有其他功能使用反射.例如,在2.8分支中有一段时间,一些数组功能正在使用反射.我认为这是在基准测试之后发生了变化的,但是有一个人说“阿哈!我会用反思来解决这个问题”的问题总是有可能的.

Scala标准库充满单身人士.大多数是不可变的,但是我知道actors库中的Scheduler对象可能被滥用于通信,因为它本质上是实际调度程序的代理,因此您可以将自己的自定义调度程序插入其中.

在这个时候我不认为Scala需要使用一个自定义的类加载器,它的所有类都是在编译时而不是运行时生成的,但是这又可能是一个移动目标. Scala生成了很多类文件,并且总是在使用它们时,在运行时生成其中的一些文件,而不是在编译时生成.

所以简而言之,我不认为这是可能的(在合理的限制条件下)来枚举和隔离可以(应该)被信任的Scala的片段.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读