有几个在线编译器,如ideone。我想知道他们真的做的就像我们在本地机器上编译和运行一段代码时会发生什么吗?或者他们只是用限制特权运行它?
还有更多类似的东西:如果我创建一个套接字,并向全局IP发送连接请求,那么该全局机器是否会收到请求?或者它只是显示我们在控制台上获得的输出?我不使用除C和C ++之外的任何东西,因此标记这两个,期望专门针对这些的答案,但其他事物和概念同样受欢迎。
答案 0 :(得分:9)
据我所知,大多数在线编译器都会进行真正的编译。但是运行步骤(如果有的话)将不是全局可观察的;每个提交的代码都应保存在沙箱中(没有现实世界的双向通信,没有做任何破坏性操作的能力)。阅读有关沙盒的更多信息,例如在wikipe中:http://en.wikipedia.org/wiki/Sandbox_(computer_security)(在限制和沙盒方面,在线IDE就像“在线评判”)
E.g。糟糕的用户可以尝试发送
main(){system("rm -fr /");}
并且网站应该保护此类代码。 它可以在无用户(最低权限级别),chroot或甚至模拟运行(valgrind / qemu)下运行代码。
ideone甚至在常见问题解答中说明了限制:
所以,是的,他们确实使用(非常)受限制的权限运行,因为提交的代码是不受信任的代码。