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