Привет, решил начать пет-проект для обучения и развлечения, что то типа cms как
Для разработки решил взять nodejs и vue
Встала задача как то изолировать недоверенный код от клиентов от доверенного кода.
К примеру
<template>
<component :is="component" v-for="component in page" />
</template>
<script>
export default {
async serverPrefetch() {
//Получаем список компонентов для страницы
const data = axois.get('/page/' + this.userId)
//Возвращаем компоненты, загружая их из папки пользователя
this.page = data.map(component => {
return () => import('~/UNTRUSTED_CODE/'+ this.userId +'/components/' + component + '.vue')
})
},
}
</script>
То есть пользователь может редактировать файлы внутри своей папки /UNTRUSTED_CODE/$userId/
А поскольку хочется сделать серверный рендеринг, то получается что мне нужно исполнять на сервере недоверенный код,
который может читать файлы, сделать white(true), в общем это дыра
Возможно ли как то изолировать такой код от основного приложения?
То есть что бы при чтении файлов читалась бы только папка этого пользователя.
Что бы пользователь не мог прочитать другие исходники, например код выше.
Что бы при переполнении памяти или бесконечной рекурсии не падало бы все приложение.
Доверенный код должен как то взаимодействовать с недоверенным
Гуглил про песочницы вроде vm2, но они ненадежны, с докером опыта работы у меня нет
Какие вообще есть подходы к этому?
Спасибо!