在线编译器工具是不是执行所有操作,或者它们只是检查它们是不是只是编译?
Posted
技术标签:
【中文标题】在线编译器工具是不是执行所有操作,或者它们只是检查它们是不是只是编译?【英文标题】:Do Online compiler tools perform everything or they just check if they just compile?在线编译器工具是否执行所有操作,或者它们只是检查它们是否只是编译? 【发布时间】:2011-11-14 12:22:51 【问题描述】:有几个在线编译器,如ideone。我想知道他们真的像我们在本地机器上编译和运行一段代码时所做的那样吗?或者他们只是以受限的权限运行它?
还有很多类似的事情:如果我创建一个套接字,并向一个全局 IP 发送一个连接请求,那台全局机器会收到请求吗?还是只显示我们在控制台上得到的输出?我不使用 C 和 C++ 以外的任何东西,因此标记这两个,期待专门针对这些的答案,但其他事物和概念同样受到欢迎。
【问题讨论】:
为什么不试试呢? :-) 我敢打赌,那些编译器不会有任何可用的非标准库,而且它们可能会去掉内联汇编... @KerrekSB:他们确实有一些可用的非标准库;例如,ideone 和 codepad 都允许使用 Boost 库(虽然不是最新版本)。 【参考方案1】:据我所知,大多数在线编译器都会进行真正的编译。但是运行步骤(如果有的话)将不是全局可观察的;每个提交的代码都应该保存在沙箱中(没有现实世界的双向通信,没有执行任何破坏性操作的能力)。阅读有关沙盒的更多信息,例如in wikipe: http://en.wikipedia.org/wiki/Sandbox_(computer_security) (在线 IDE 在限制和沙盒方面就像“在线法官”)
例如不良用户可以尝试发送
main()system("rm -fr /");
并且网站应该防御此类代码。 它可以在无用户(最低权限级别)下使用 chroot 运行代码,甚至可以模拟运行(valgrind/qemu)。
ideone 甚至在关于限制的常见问题解答中说:
我可以从我的程序访问网络吗? - 没有 我可以在我的程序中写入或读取文件吗? - 没有 执行时间:5 或 15 秒所以,是的,它们确实以(非常)受限的权限运行,因为提交的代码是不受信任的代码。
【讨论】:
以上是关于在线编译器工具是不是执行所有操作,或者它们只是检查它们是不是只是编译?的主要内容,如果未能解决你的问题,请参考以下文章