Какой самый безопасный способ разрешить выполнение JavaScript, написанного на клиенте, на сервере?
Я хотел бы позволить нашим пользователям писать логику синтаксического анализа строк в JavaScript, которая затем будет выполняться на сервере.
Изменить (подробнее):
- Regex не вариант, так как они будут нужны
if
,else
,switch
так далее - Я хотел бы избежать создания собственного языка
- Идея в том, что если пользователь знает JS, он может написать собственную логику.
Я посмотрел " Остановка бесконечных циклов" с помощью CodePen, где они генерируют абстрактное синтаксическое дерево с использованием Esprima, а затем восстанавливают JavaScript, который мы используем Escodegen. Что меня беспокоит, так это то, что кто-то еще может внедрить какой-нибудь хакер Unicode.
2 ответа
Самый безопасный способ - создать собственный синтаксический анализатор / интерпретатор для некоторого подмножества javascript (или любого другого языка сценариев) или для своего собственного домена. Это большая работа, но все же намного проще и безопаснее, чем поддерживать изолированную виртуальную машину javascript на сервере и взаимодействовать с ней.
Идея:
пользователи пишут свои пользовательские функции на веб-странице
веб-страница получает данные с сервера
пользовательская функция применяется к данным на стороне клиента
результаты отправляются обратно на сервер (убедитесь, что результаты не скомпрометированы)