jsFiddle仅运行客户端代码(JavaScript)-它能够伤害的只有您自己的机器(或查看您代码片段的人的机器)。
大多数浏览器都有一些功能来检测不响应的脚本(如无限循环),并提供停止脚本的选项。
然后还有像codepad.org和ideone.com这样的网站,它们确实在本地机器上运行代码。
代码执行由基于geordi的监管程序处理。策略是在ptrace下运行所有内容,并禁用或忽略了许多系统调用。编译器和最终可执行文件都在chroot jail中执行,并受到严格的资源限制。
当你的应用是远程代码执行时,你必须预计会出现安全问题。除了依靠chroot和ptrace监管程序外,我还采取了一些额外的预防措施:
- 监管程序运行在虚拟机上,虚拟机被防火墙保护,使其无法进行出站连接。
- 运行虚拟机的机器也受到严格的防火墙保护,并定期从其源映像还原。
那个特定的网站看起来像是在客户端运行其代码。因此,你无法伤害他们的服务器。
其他网站采用在虚拟机中运行代码的方法。你只需限制虚拟机可以使用的资源,他们已经限制了可能造成的损害。