Как создать «песочницу» для кодирования с облачными функциями для выполнения пользовательского кода на сервере?Dos / don'ts? - PullRequest
0 голосов
/ 26 сентября 2019

Я работаю над проектом, похожим на Codecademy, и провожу некоторые исследования о том, как выполнить потенциально вредоносный пользовательский код.Я могу запустить html, css и js на стороне клиента, но мне нужно будет выполнить код на сервере для скомпилированных языков.

Для тех, кто не знаком с Codecademy, это интерактивный веб-сайт, который учит пользователей тому, каккодировать.Есть некоторые проблемы с кодированием, и пользователи вводят свое решение, которое выполняется на сервере с тестовыми примерами.Если код проходит тестирование, пользователь может продолжить со следующей задачей.Как вы можете догадаться, моя самая большая проблема - выполнение пользовательского кода на стороне сервера.

Я думаю, что лучший способ защитить мой бэкэнд - это создание слоев и использование контейнеров для отделения компиляторов от остальной части сервера.Мой план - создание микросервисов для каждого языка программирования.Я планирую сделать это с помощью (gcp или aws) облачных функций.

После этих частей я потерялся.Я думаю, что я должен создать экземпляр контейнера с помощью Docker и запустить код пользователя в этих контейнерах с тестами и вернуть результат на главный сервер.Предполагая, что это будет просто с образами докеров (или используя что-то вроде compilebox ), но я не уверен насчет производительности.Потому что каждый раз, когда отправляется решение, контейнер будет создаваться с нуля, а после выполнения кода он будет уничтожен.Мое второе беспокойство - это план оплаты облачных функций.Мне как-то нужно ограничить доступ пользователей к сервису, поскольку я не хочу платить миллионы за стоимость сервера.

Поскольку у меня нет опыта работы с облачными функциями, я не уверен, является ли это действительным планом.Должен ли я использовать микроуслуги или создать классический монолитный бэкэнд?Если у вас есть другие идеи или предложения, пожалуйста, не стесняйтесь поделиться.Если моя идея верна, пожалуйста, помогите мне с тем, что нужно и что нельзя делать по этому делу.

Примечание: я использую Node на бэкэнде.

Спасибо

1 Ответ

2 голосов
/ 26 сентября 2019

google's katacoda предлагает встроенную оболочку на вашем сайте:

<script src="//katacoda.com/embed.js"></script>
<div id="katacoda-scenario-1"
    data-katacoda-id="<username>/<scenario-name>"
    data-katacoda-color="004d7f"
    style="height: 600px; padding-top: 20px;"></div>

https://www.katacoda.com/embed

может оказаться очень полезным в вашем случае.

Такое решение звучит намного проще и безопаснее, чем создание собственной песочницы,

много удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...