我正在编写一个需要执行不受信任的python代码的应用程序。 (即类似于家庭作业提交服务器的应用,其中学生的输入不受信任)
对此进行思考,我的第一个念头是,通过禁用语言的文件I / O功能(因此,将代码限制为仅使用stdin / stdout),程序不会对系统造成太大损害。 / p>
这是正确的吗?还是我没有想到的攻击媒介?
是否可以传递某种python标志或编译器选项来隔离代码?
答案 0 :(得分:2)
在docker容器中运行它们!
与安全性一样,没有灵丹妙药。您的里程可能会有所不同。
答案 1 :(得分:0)
我不会使用任何python沙箱方法在您的计算机上执行任意代码,因为安全专家多次演示了它们是如何实现转义的。 Escaping the python sandbox
我建议使用权限受限的新用户在docker容器中运行代码。
最后,您可以尝试将python代码解析为AST,然后降低级别以确保不存在危险动作。
我的选择是使用docker容器,最好是访问受限的Alpine版本。