我正在编写一款应用程序,需要执行不受信任的Python代码(例如类似于作业提交服务器的应用程序,学生输入是不可信的)。
考虑到这一点,我的第一个想法是禁用语言的文件I/O功能(从而限制代码只能使用stdin/stdout),程序无法对系统造成太大的危害。
这种做法正确吗?或者还有其他攻击方式我没有考虑到吗?
是否可以通过某种Python标志或编译器选项传递来隔离代码?
我正在编写一款应用程序,需要执行不受信任的Python代码(例如类似于作业提交服务器的应用程序,学生输入是不可信的)。
考虑到这一点,我的第一个想法是禁用语言的文件I/O功能(从而限制代码只能使用stdin/stdout),程序无法对系统造成太大的危害。
这种做法正确吗?或者还有其他攻击方式我没有考虑到吗?
是否可以通过某种Python标志或编译器选项传递来隔离代码?
我不会使用任何Python沙盒方法在您的计算机上执行任意代码,因为安全专业人员已经多次演示了它们是可逃脱的。 逃脱Python沙盒
我建议在具有受限权限的新用户的Docker容器中运行代码。
最后,您可以尝试将Python代码解析为AST,并向下遍历级别以确保不存在危险操作。
我的选择是使用Docker容器,最好是带有受限访问权限的Alpine版本。
你可能想要看一下https://github.com/openedx/codejail。这个软件包也可以在PyPI上找到,被Open edX和AWS等科技巨头使用和维护。