我想知道Codepad.org网站的原理。(在线C编译器原理)
我认为原则遵循以下步骤。
-
用户提交C代码
-
网站发送到安装在服务器上的GCC。
-
GCC返回字符串并发送给web (Webserver)
-
web服务器返回字符串给用户。
这个步骤对吗?那么,如何防止恶意代码,如删除服务器上的所有文件?
From http://codepad.org/about:
也代码执行由一个基于geordi的主管处理。该策略是在ptrace下运行所有内容,不允许或忽略许多系统调用。编译器和最终可执行文件都在chroot jail中执行,有严格的资源限制。管理器是用Haskell编写的。
:
偏执当你的应用是远程代码执行时,你必须预料到安全问题。我没有仅仅依赖chroot和ptrace管理器,而是采取了一些额外的预防措施:
管理进程运行在虚拟机上,这些虚拟机上有防火墙,因此它们无法进行传出连接。
运行虚拟机的机器也有严格的防火墙,并定期从它们的源映像进行恢复。