我正计划构建一个Web应用程序,该应用程序将允许用户编写自己的代码,在浏览器中进行编译和测试,例如phpFiddle或Golang的导览
- 我知道保护这样的服务器将很困难。
- 我知道我可以尝试通过限制对VM的标准库的访问来保护它(也许我会),但是我知道这还不足以保护所有类型的攻击,因此它根本不是真正的保护。
这是我正在考虑的处理方式:
- 主从配置,从服务器只能由主服务器访问。 从服务器将运行一台服务器,该服务器将根据请求在chroot监狱中产生编译器进程,并施加超时,因此,如果运行时间超过指定时间,它将终止该应用程序。
- 使用用户绑定的chroot,我可以很好地控制用户可以访问的内容(特别是因为我的目标语言没有太多的依赖关系),但是我确信仍然有一些粗糙的地方,例如:
- 如何防止运行其他独立进程的不受信任程序? 是否有一种很好的方法来拒绝进程派生或生成任何其他进程?
- 我可能忽略了哪些其他可能的攻击路线?
我进行了一些搜索以找到基于Linux的好的沙箱,尽管它们看起来不错,但对我来说似乎有点过大了,因为我的从属服务器本身可以被视为沙箱,因为我将竭诚奉献它们。编译/运行请求的代码的任务。 这就是为什么我在这里而不是在Serverfault中问这个问题的原因,因为它似乎与编程有关的多于与服务器配置有关的多。