如何实现在线沙箱
OJ(Online Judge)允许用户上传任意代码片段以在服务器上执行,但它也有一个沙箱来防止恶意代码的运行。 例如,在leetcode上,如果我在python中提交这段代码:
import subprocess
res = subprocess.check_output(["ls", "/"])
print res
它返回:
Line 36: OSError: [Errno 11] Resource temporarily unavailable
如果我想在Python中实现OJ系统,有没有办法监视子进程的系统调用,并禁止某些调用?
我已经搜索过,大多数帖子都提到了使用ptrace或在虚拟机中运行脚本。 我想知道是否有更好的方法。
注意:由于OJ支持上传不同语言的程序(C / python / Java),因此限制python代码(如exec
在有限范围内的代码)不起作用。