安全地运行用户代码

时间:2015-07-14 14:57:52

标签: security eval user-defined-functions

我希望创建一个AI环境,用户可以为AI提交自己的代码并让他们参与竞争。语言可以是任何语言,但首选的是易于学习的东西,如JavaScript或Python。

基本上我看到三个选项有几个变种:​​

  1. 制作我自己的语言,例如一个只有非常基本功能的JavaScript克隆,如变量,循环,条件,数组等。如果我想正确实现公共语言功能,这是很多的工作。

    1.1使用现有语言并将其剥离到核心。只需删除Python中的许多功能,直到上面没有任何内容(变量,条件等)。还有很多工作,特别是如果我想跟上游保持同步(尽管我也可以忽略上游)。

  2. 使用语言的内置功能将其锁定。我从PHP知道你可以禁用函数和搜索,类似的解决方案似乎存在于Python(有很多很多警告)。为此,我需要很好地理解所有语言的功能,不要错过任何内容。

    2.1。制作一个预处理器,拒绝危险的代码(最好是基于白名单的代码)。与选项1类似,除了我只需实现解析器而不实现所有功能:预处理器必须理解语言,以便您可以使用名为“eval”的变量但不调用名为“eval”的函数“EVAL”。仍然有很多工作,但比选项1更易于管理。

    2.2。在非常锁定的环境中运行代码。 Chroot,没有不必要的权限......也许在虚拟机或容器中。在那个意义上的东西。我必须研究如何实现这一目标,以及如何让它以安全的方式给我结果,但这似乎是可行的。

  3. 手动阅读所有代码。可以在小规模或主持人上进行,但仍然很乏味且容易出错(我可能会错过if (user.id = 0)之类的内容。)

  4. 我想象2.2工作的方式是这样的:在虚拟机(或其他东西)中运行两个AI并限制它仅与主机通信(没有其他Internet或LAN访问)。两个AI都在一台单独的机器上运行,并通过主机上运行的API相互通信(好吧,通过比赛场,从而看到对方的位置)。

    选项2.2似乎是最可行的,但也相对hacky ...我让某人的代码在虚拟化或锁定的环境中松散,希望这能让他们在向DoS提供免费游戏或者突破环境。然后,大多数其他选择都不是更好。

    TL; DR:本质上我的问题是:我如何让人们为AI提供'逻辑'(我认为最容易使用代码完成)然后运行在不影响系统功能的情况下?必须至少有2个AI在同一个游戏区域工作。

0 个答案:

没有答案