Я хотел бы разрешить нашим пользователям писать логику синтаксического анализа строки в JavaScript, которая затем будет выполняться на сервере.
Изменить (подробнее):
if
, else
, switch
т.д.Я посмотрел на Stopping Infinite Loops от CodePen, где они генерируют абстрактное дерево синтаксиса с использованием Esprima, а затем регенерируют JavaScript, который мы используем Escodegen. Меня беспокоит такой подход, что кто-то все еще может ввести какой-то взлом Unicode.
Самый безопасный способ - создать собственный анализатор/интерпретатор для некоторого подмножества javascript (или любого другого языка сценариев) или вашего собственного домена. Это большая работа, но все же намного проще и безопаснее, чем поддержка изолированной javascript VM на сервере и связь с ней.
Идея:
пользователи пишут свои пользовательские функции на веб-странице
веб-страница извлекает данные с сервера
пользовательская функция применяется к данным на стороне клиента
результаты отправляются обратно на сервер (убедитесь, что результаты не скомпрометированы)
new Function() { arg1, arg2, arg3, code )(arg1, arg2, arg3)
. Это создает изолированную область (за исключением глобальной области, которая может быть перезаписана путем добавления локальных переменных, ссылающихся на глобальную область). Возможно, вы захотите поместить некоторые защитные меры в часть кода (например, запретить операторыrequire
). Если код должен что-то возвращать, то вы можете поймать результат