#settimeout #eval #content-security-policy
#settimeout #оценка #контент-безопасность-политика #eval #контент-политика безопасности
Вопрос:
По какой-то причине один из моих JS-файлов вызывает unsafe-eval
нарушение Политики безопасности контента на моем сайте. Мне это показалось странным, потому что нигде в файле этого нет eval()
. Ошибка возникает в следующей строке:
setTimeout(callSpecific(), (lengthMF * (number.length 2)));
Единственное, что я вижу здесь, — это арифметика в RHS, которая устанавливает значение таймаута. Итак, я попытался:
setTimeout(callSpecific(), (parseInt(lengthMF) * (parseInt(number.length) 2)));
То же самое. Сами переменные даже не являются строками — они определяются как:
var lengthMF = 150;
var number = ""; // yes, this is a string but number.length is not!
Почему это вызывает нарушение CSP? У меня есть другие setTimeout()
на странице, и это, кажется, единственная проблема. Странная вещь заключается в том, что временная замена арифметического выражения константой (например, 50
) не приводит к исчезновению проблемы.
Если это необходимо, callSpecific()
выглядит примерно так:
function callSpecific() {
if (number == 0) {
operatorRing();
} else if (number.length == 2 amp;amp; number.charAt(1) == 0) {
playReorder();
} else if (number.length == 3) {
//
} else if (number.length <7 || number.length > 11) {
//
} else if (number.length == 11 amp;amp; (number.charAt(4) == 1 || number.charAt(4) == 0)) {
//
}
}
Комментарии:
1. Вариант 1: Вы передаете
callSpecific()
, который вызывался раньшеsetTimeout()
, и потому, чтоnumber == 0
,operatorRing()
вызывает некоторые забавные вещи.2. Вариант 2: Каким-то образом
callSpecific()
возвращает строку, что означает, что, когда придет время запускать код,eval()
будет вызвана эта строка.3. @root К сожалению, ни то, ни другое не так. В моем тестировании
number
не было 0, иcallSpecific()
фактически ничего не возвращает4.
callSpecific()
ничего не возвращает (т. е.undefined
)? Значит, вы ничего не передаете наsetTimeout()
исполнение?