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

Creating a secure environment for untrusted python code

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

考虑到这一点,我的第一个想法是通过禁用语言的文件 I/O 功能(因此,将代码限制为仅使用 stdin/stdout),程序不能做太多事情对系统造成伤害。

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

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

运行 它们在 docker 个容器中!

与任何有关安全的事情一样,没有灵丹妙药。您的里程可能会有所不同。

我不会使用任何 python 沙盒方法在你的机器上执行任意代码,因为安全专家多次演示了它们是如何逃脱的。 Escaping the python sandbox

我建议运行 docker 容器内的代码,新用户的权限受限。

Hardening Linux Containers

最后,您可以尝试将 python 代码解析为 AST 并向下查看级别以确保不存在危险操作。

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