Сгенерированная на стороне сервера клиентская песочница Javascript

#javascript #ecmascript-6 #server-side-rendering #sandbox #serverside-javascript

#javascript #ecmascript-6 #рендеринг на стороне сервера #изолированная среда #серверная часть -javascript

Вопрос:

В настоящее время у меня есть песочница, которая работает на стороне клиента с использованием with proxy техники , но я хочу перенести все шаблоны на рендеринг на стороне сервера, чтобы уменьшить нагрузку на клиентские компьютеры, чтобы иметь возможность сделать мой CSP более строгим.

Однако я не могу просто перенести свой «изолированный генератор кода» на сервер и закрыть его, поскольку весь мой серверный код находится в строгом режиме, следовательно, нет with , следовательно, нет песочницы.

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

Комментарии:

1. Function("with({key: 'value'}) console.log(key);")() это способ, потому Function что исключает директиву use strict по спецификациям.

2. Я не могу использовать это, так как хочу явно удалить eval из клиента (а конструктор функций — eval)

3.1. Function нет eval … они делают разные вещи. 2. Function это то, что вы можете выполнить на сервере, поскольку вы спросили, как выполнить код на сервере.

4. кроме того, вы можете создать виртуальную машину nodejs.org/api/vm.html

5. хорошо, правильно, это не eval, но он делает почти то же самое, и если я включу unsafe-eval в свою функцию CSP, она также больше не будет работать, поскольку runtime-js-parsing отключен. Вот что я имел в виду. и я также не могу запустить функцию на сервере, я хочу извлечь js из шаблонов, сохранить их как вызываемый фрагмент кода в файле, этот сгенерированный файл будет включен в мой клиент. Это рендеринг на стороне сервера, приложение запускается на стороне клиента. Я хочу создавать шаблоны, но не хочу авалировать.