我想做一个简单的在线编译器,它从浏览器中获取代码,将其发送到服务器,编译它,然后返回浏览器执行结果。
我担心有人会从代码或类似的东西中执行format C:\
。有什么办法可以预防吗?
P.S。我正在寻找Windows解决方案。
答案 0 :(得分:1)
您需要使用多层操作系统功能。在防火墙虚拟机中以受限制的用户身份运行编译器和生成的程序,并限制对操作系统的访问。
如果一切顺利,VM中的操作系统将阻止他们执行格式化驱动器之类的操作。但如果没有,并且他们获得管理员访问权限,那么它是一个从外部对其进行限制的一次性虚拟机这一事实意味着管理员访问实际上并不值得。您可以简单地重新映像VM并重新开始。 (事实上,你可能想要将它成像,即使一切正常也只是作为预防措施。)
有了两层保护,你应该非常安全。
现在,在VM中,我可能只是运行Linux。即使服务器是Windows机器,在VM内部,您可以安装最小的Linux发行版并使用setrlimit
等来限制进程内存和CPU时间。但是,如果您也想要Windows,作业对象https://msdn.microsoft.com/en-us/library/ms684161(VS.85).aspx也会达到类似的资源限制。只需确保运行编译器和程序的用户帐户也对驱动器具有严格限制的权限(在任一操作系统上)。
当然,您也可以在没有VM的主机操作系统上执行此类操作...但是如果出现问题,您就不能轻易放弃并替换整个操作系统,管理员访问可能会绕过您的其他防火墙或cpu限制。我肯定会使用这两层。
顺便说一句,尽管有vm层,但不要忘记仍然使用正确的XSRF和XSS护理,就像任何其他网络表单一样。