首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安全运行用户代码

安全运行用户代码
EN

Stack Overflow用户
提问于 2015-07-14 14:57:52
回答 1查看 532关注 0票数 2

我期待创造一个人工智能环境,用户可以提交他们自己的代码为人工智能和让他们竞争。这种语言可以是任何语言,但学习起来容易的东西(比如JavaScript或Python )是首选。

基本上,我看到了三个有几个变体的选项:

  1. 让我自己的语言,例如,一个JavaScript克隆,只有非常基本的特性,如变量,循环,条件,数组等。如果我想要正确地实现公共语言特性,这是一项很大的工作。 1.1以现有的语言为例,将其剥夺至其核心。只需从Python中删除许多特性,直到只剩下上面的(变量、条件等)。仍然有很多工作要做,特别是如果我想跟上上游(虽然我也可以忽略上游)。
  2. 使用语言的内置特性来锁定它。我从PHP中了解到,您可以禁用函数并四处搜索,类似的解决方案似乎存在于Python (有很多很多警告)。为此,我需要对语言的所有特性有一个很好的理解,并且不要错过任何东西。 2.1。制作一个预处理程序,拒绝使用危险的代码(最好是基于白名单的)。类似于选项1,只是我只需要实现解析器,而不是实现所有功能:预处理器必须理解该语言,以便您可以拥有名为"eval“的变量,而不是调用名为"eval”的函数。仍然有很多工作要做,但比选项1更容易管理。 2.2。在非常锁定的环境中运行代码。Chroot没有不必要的权限。可能在虚拟机或容器中。某种意义上的东西。我必须研究如何实现这一目标,以及如何使其以安全的方式提供结果,但这似乎是可行的。
  3. 手动读取所有代码。可以在一个小规模或与主持人,虽然仍然乏味和容易出错(我可能会错过的东西,如if (user.id = 0))。

我设想2.2的工作方式是这样的:在虚拟机(或其他什么地方)中运行两个a,并限制它只与主机通信(没有其他Internet或LAN访问)。两个人工智能在一个单独的机器中运行,并通过运行在主机上的API相互通信(嗯,与运动场,从而他们看到彼此的位置)。

选项2.2似乎是最可行的,但也相对比较烦琐.我让某个人的代码在一个虚拟化或锁定的环境中释放,希望这能让他们继续工作,同时给他们提供免费的游戏给DoS,或者让他们脱离环境。话又说回来,大多数其他选择也不会更好。

TL;DR:,本质上我的问题是:我如何让人们给我一个AI的“逻辑”(我认为这是最容易使用代码完成的),然后在不损害系统功能的情况下运行它呢?必须有至少2名认可机构在同一运动场上工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-14 15:22:37

这实际上只是一个插件系统,因此研究其他人如何实现插件是一个很好的起点。特别是,我会看看浏览器,如Chrome和Safari以及他们的插件系统。

在现代插件系统中,一个常见的主题是进程隔离。理想情况下,您应该在沙箱中运行它自己的进程空间中的插件。在OS中,看看XPC,它是针对这个问题明确设计的。在Linux (或者更可移植)上,我可能会查看NaCl (本地客户端)。JVM还被设计为提供沙箱,并提供了丰富的语言选择。(也就是说,我个人并不认为JVM是一个非常强大的沙箱。它有过安全问题的历史。)

总的来说,我对这类项目的偏好是语言无关的API。我经常使用REST (或“REST类”)。这允许插件受到高度限制,同时又不限制语言选择。只要有可能,我就喜欢简单的HTTP通信,因为它在许多语言中都有丰富的支持,所以它对插件没有什么限制。事实上,根据您的描述,您甚至不必在硬件上运行插件(当然也不必在主服务器上运行)。使插件远程客户端消除了许多潜在的问题。

但最终,我认为像你的"2.2“是正确的方向。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31410214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档