bal*_*ldr 4 python security permissions eval exec
我需要你的新想法,任何帮助表示赞赏。
我正在实施一个系统,用户可以在其中上传自己的 Python 脚本并在其中一台服务器中执行它们。
我很注意安全问题。我想限制从此脚本对操作系统的任何访问。
首先,剧本获得与验证ast解析器禁止访问许多最明显的关键字时exec,import,open,等。
用户可以声明一些库的使用。重要的一个是pandas图书馆(我也必须提供matplotlib,numpy和其他人)。我已经实现了“代理”对象,模仿模块,但提供对任何有限属性集的访问。比如我可以提供一个代理对象json,但是访问功能loads还是dumps不允许的。
最明显的企图名称从任何物体的属性os,sys等不得也。这样,当用户尝试os使用json.os或像这样访问模块时,我试图关闭一个洞。
这可以工作,但它是一个简单的盾牌。我可以查看所有模块并禁止访问大多数危险功能,但即使错过了一个也可能导致潜在的损坏。此外,某些模块可能会以一种棘手的方式访问,例如pandas.tools.util.pd将引用原始pandas模块。我会花一年时间来关闭所有东西..
我考虑过在文件系统级别限制访问,但脚本eval在主进程(celery基于)内以函数运行,并且与主进程具有相同的权限(和相同的用户)。理论上它可以读取所有源并将它们传递给用户。
我的一个想法是使用最少的源和权限在单独的进程中运行脚本,并使用管道将数据传入/传出。但这将需要重构大量代码并且无法保证稳定性 - 我仍然需要大量代码才能使其正常工作。