Me gustaría crear una aplicación que permita a los usuarios ejecutar código desde el navegador. Piense como un pastebin PHP.
Mi idea de hacer esto de manera segura es comenzar asegurando que cada vez que se ejecuta el código, se crea un entorno de trabajo independiente para la aplicación. Si el usuario se las arregla para ejecutar un código peligroso, se bloquea en una caja de arena que eventualmente se agotará rápidamente. Literalmente, ese sandbox muere, por lo que cualquier otra solicitud posterior a la primera nunca llegará al sandbox inexistente.
Para asegurarme de que tengo suficientes "sanboxes" para dar cuenta de x cantidad de usuarios, crearía un conjunto de aplicaciones que estén listas y disponibles.
Tengo la sensación de que esta es una configuración bastante común. Pero me falta un lugar para empezar.
¿Cómo puedo hacer esto de forma segura? He estado buscando en FireJail y utilizando Docker y Swarm para girar varias cajas para equilibrar la carga. No estoy seguro si estoy en el camino correcto. También encontrado linux-vserver.
Utilicé PHP como ejemplo. Estoy buscando una solución que funcione para otros idiomas. Estoy especialmente interesado en configurar servidores para juegos CTF en los que a veces se requiere un RCE para obtener una bandera. Tendría un servidor que permite a varias personas conectarse y hacer el desafío individualmente, pero sin poder acceder a los archivos que ejecutan el servidor.