如何实现在线沙箱

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在有限范围内的代码)不起作用。

链接地址: http://www.djcxy.com/p/66377.html

上一篇: How to implement a sandbox for an online

下一篇: how does ptrace catch fork's system call?