Я работаю над проектом, похожим на Codecademy, и провожу некоторые исследования о том, как выполнить потенциально вредоносный пользовательский код.Я могу запустить html, css и js на стороне клиента, но мне нужно будет выполнить код на сервере для скомпилированных языков.
Для тех, кто не знаком с Codecademy, это интерактивный веб-сайт, который учит пользователей тому, каккодировать.Есть некоторые проблемы с кодированием, и пользователи вводят свое решение, которое выполняется на сервере с тестовыми примерами.Если код проходит тестирование, пользователь может продолжить со следующей задачей.Как вы можете догадаться, моя самая большая проблема - выполнение пользовательского кода на стороне сервера.
Я думаю, что лучший способ защитить мой бэкэнд - это создание слоев и использование контейнеров для отделения компиляторов от остальной части сервера.Мой план - создание микросервисов для каждого языка программирования.Я планирую сделать это с помощью (gcp или aws) облачных функций.
После этих частей я потерялся.Я думаю, что я должен создать экземпляр контейнера с помощью Docker и запустить код пользователя в этих контейнерах с тестами и вернуть результат на главный сервер.Предполагая, что это будет просто с образами докеров (или используя что-то вроде compilebox ), но я не уверен насчет производительности.Потому что каждый раз, когда отправляется решение, контейнер будет создаваться с нуля, а после выполнения кода он будет уничтожен.Мое второе беспокойство - это план оплаты облачных функций.Мне как-то нужно ограничить доступ пользователей к сервису, поскольку я не хочу платить миллионы за стоимость сервера.
Поскольку у меня нет опыта работы с облачными функциями, я не уверен, является ли это действительным планом.Должен ли я использовать микроуслуги или создать классический монолитный бэкэнд?Если у вас есть другие идеи или предложения, пожалуйста, не стесняйтесь поделиться.Если моя идея верна, пожалуйста, помогите мне с тем, что нужно и что нельзя делать по этому делу.
Примечание: я использую Node на бэкэнде.
Спасибо