#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 изменится, ваша сохраненная копия не пострадает.