Я работаю над react-metaform, и одной из моих задач является то, что мне нужно разрешить конечному пользователю определять метаданные как функции. Пример:Как проверить, является ли функция чистой?
socialSecurityNumber.required: (m) => m.type == 'person'
Проблема очевидна: я не могу доверять пользователю. Таким образом, эти меры предосторожности, я планирую сделать:
- определяемые пользователем функции должна быть чистой функцией. В том смысле, что эти функции могут получить доступ только к их параметру, больше ничего.
- Пользовательские функции будут работать в среде, устойчивой к исключениям, слишком продолжительным временам выполнения и бесконечным циклам. (Я не беспокоюсь об этом прямо сейчас).
Вопрос: Как я могу убедиться, что пользовательская функция выполняет только его параметры и ничего больше?
Я полагаю, ваш лучший выбор, чтобы определить свой собственный язык выражений, который разбирается и затем оценивается на ваших реальных объектах, а не с помощью 'new Function'. – Bergi
http://stackoverflow.com/questions/14889393/how-to-run-a-javascript-function-in-a-sandbox-environment – epascarello
Я думаю, что с того момента, как вы просите пользователя написать JS и выполнить его в значительной степени сделаны для. Вы не можете предотвратить длительное время выполнения (выполнить до завершения, да!) Или убедиться, что функция чистая (возможно, с массивным затенением параметров, но это было бы странно). –