为不受信任的python代码创建安全环境

为不受信任的python代码创建安全环境,python,security,sandbox,execution,Python,Security,Sandbox,Execution,我正在编写一个应用程序,需要在其中执行不受信任的python代码。(即类似于作业提交服务器的应用程序,其中学生输入不可信) 考虑到这一点,我的第一个想法是,通过禁用该语言的文件I/O功能(从而将代码限制为仅使用stdin/stdout),程序不会对系统造成太大危害 这是正确的,还是有我没有想到的攻击向量 我可以传递某种python标志或编译器选项来隔离代码吗?在docker容器中运行它们 正如任何关于安全的事情一样,没有银弹。您的里程可能会有所不同。在docker集装箱中运行它们

我正在编写一个应用程序,需要在其中执行不受信任的python代码。(即类似于作业提交服务器的应用程序,其中学生输入不可信)

考虑到这一点,我的第一个想法是,通过禁用该语言的文件I/O功能(从而将代码限制为仅使用stdin/stdout),程序不会对系统造成太大危害

这是正确的,还是有我没有想到的攻击向量


我可以传递某种python标志或编译器选项来隔离代码吗?

在docker容器中运行它们


正如任何关于安全的事情一样,没有银弹。您的里程可能会有所不同。

在docker集装箱中运行它们


正如任何关于安全的事情一样,没有银弹。您的里程数可能会有所不同。

我不会使用任何python沙盒方法在您的机器上执行任意代码,因为安全专业人员多次演示了它们是如何可转义的。

我建议在docker容器中与具有受限权限的新用户一起运行代码

最后,您可以尝试将python代码解析为AST,并进一步确保不存在危险的操作


我的选择是使用docker容器,最好是访问受限的Alpine版本。

我不会使用任何python沙盒方法在您的机器上执行任意代码,因为安全专业人员多次演示了它们是如何可转义的。

我建议在docker容器中与具有受限权限的新用户一起运行代码

最后,您可以尝试将python代码解析为AST,并进一步确保不存在危险的操作


我的选择是使用docker容器,最好是访问受限的Alpine版本。

几年前,有人尝试将这种环境作为标准库的一部分来实现。它被放弃了,因为似乎连Python开发人员都无法使它真正安全。几年前,有人尝试将这种环境作为标准库的一部分来实现。它被放弃了,因为似乎连Python开发人员都无法使它真正安全。看见