Как заменить новые конструкторы функций (строк) простыми функциями

#javascript #function #security #constructor #owasp

#javascript #функция #Безопасность #конструктор #owasp

Вопрос:

Я хотел бы знать, если это не дублирующий вопрос, как можно преобразовать функцию, созданную с помощью конструктора Function(), в простую функцию. Чтобы лучше объяснить проблему, я приведу пример:

     function foo() {
       var funcString = "console.log('hello'); var x = document.getElementById('content-1x');"
           obj.assignFunction = new Function(funcString);
    }
  

В этом случае funcString — это функция, которая передается в виде строки.

На первый взгляд, все это кажется простым, поскольку вы просто помещаете строки кода в анонимную функцию, которая присваивается obj.assignFunction в качестве следующего примера:

 function foo(){
  obj.assignFunction = function(){
    console.log('hello');
    var x = document.getElementById('content-1x')
  }
}
  

Но моя проблема в том, что я получаю строку функции из атрибута элемента HTML, и она может измениться на других страницах.
Например, можно получить functionString из этого диапазона HTML

 <span id="elem1" functionString="console.log('hello'); var x = 3*3">
  

Итак, как вы можете видеть, строка функции может меняться.
Чтобы не быть рассеянным, я заканчиваю точным вопросом:

Возможно ли заменить новый конструктор функций (functionString) на function(){//functionString, преобразованный в строки кода} также, если functionString может быть основан на атрибуте элементов «functionString»?

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

1. Я получаю строку функции из атрибута HTML-элемента , это действительно очень странно . Подумайте, является ли другой подход жизнеспособным — ваша кодовая база будет лучше.

2. @CertainPerformance Это старый код, который я не могу изменить с нуля, чтобы не тормозить все приложения: (итак, чтобы покрыть риск, я могу просто преобразовать «new Function()» в function(){} . Или, если существует другой подход, он будет лучше, но я понятия не имею

3. Возможно, вы могли бы сохранить строку функции (или функцию, которая была определена из нее) где-нибудь и использовать сохраненную версию. Идея заключается в том, что если атрибут HTML изменится, ваша сохраненная копия не пострадает.