我有一个程序可以从用户那里获取代码作为输入(这个问题与语言无关,尽管我主要对Java和Python的答案感兴趣)。通常,这段代码会很有用,但我不保证用户不会犯错误,甚至故意不提供恶意代码。
我希望能够安全地执行此代码,即如果结果是有缺陷或恶意的话,没有有害的副作用。
更具体地说:
用户指定输入代码应该对主程序中存在的某些对象(从用户获取代码并执行它的程序)进行操作。最理想的是,它应该能够直接访问这些对象,但通过某种通信协议或文件将它们发送到子程序也没问题。
以同样的方式,代码应生成一些传输回父程序的输出。
用户可以指定是否允许代码访问任何其他数据,是否应允许其读取或写入文件,以及是否应该访问任何其他接口或操作系统方法。
可以指定一个最大运行时间,如果代码尚未完成执行,代码将被中断。
父程序和要执行的代码可能是不同的语言。您可以假设编译和执行给定代码所需的程序已安装并可供父程序使用。如果语言不同,假设可以使用某些标准格式(如JSON)来传输数据(或者有更好的方法可以做到这一点吗?)
我认为这应该适用于虚拟机。但是,速度是一个问题,我希望能够快速执行许多代码块,因此为每个代码块创建和拆除它们可能会非常昂贵。
另一个选择是创建一个沙盒,例如Java可以做,但据我所知只是执行其他Java代码。我无法找到使用任意语言执行此操作的解决方案。
哪种语言能够很好地工作,哪种语言很难?
某些操作系统比其他操作系统更容易吗?