Документы Mozilla для CSP , перечисляет "eval()
и аналогичные методы" в качестве возможных нарушителей:
[...] 'unsafe-eval' Позволяет использоватьeval () и аналогичные методы для создания кода из строк.[...]
Спецификация CSP3 § 1.2.1 , упоминает "eval()
и подобные конструкции":
Снижение рискаатаки с внедрением контента, предоставляя разработчикам достаточно детальный контроль над [...] динамическим выполнением кода (посредством eval () и аналогичных конструкций) [...]
Но окончательный ответ - в CSP3spec, в § 6.1.10.4 :
Следующие приемники выполнения JavaScript стробируются в исходном выражении unsafe-eval: eval () Function () setTimeout () withначальный аргумент, который нельзя вызвать.setInterval () с начальным аргументом, который нельзя вызвать.Примечание. Если пользовательский агент реализует нестандартные приемники, такие как setImmediate () или execScript (), они ДОЛЖНЫ также быть определены как «unsafe-eval».
Итак, для целей CSP полный списокиз «конструкций выполнения динамического кода», eval()
«аналогичные методы», «связанные функции», «аналогичные конструкции»:
eval()
Function() // typically new Function()
setTimeout() // with non-callable argument
setInterval() // with non-callable argument
setImmediate()
execScript()
В моем случае я нашел несколько new Function(...)
фрагментовв связке и теперь выясняем, как предотвратить их появление.
Бонус
Если вы берете grepl
или подобный grep
-подобный инструмент, который находитСтрока соответствует и печатает окружающий контекст на основе char-by-char (а не построчно, как обычно grep
). Вы можете использовать следующую команду, чтобы найти «конструкции динамического выполнения кода» во всех файлах вашего комплекта(минимизированное и разделенное по кодам) приложение:
find "<build_dir>"" -type f -iname "*.js" -exec grepl -k 512 -H "(eval|Function)(\s|\t)*\(" '{}' \;
В качестве альтернативы, вы можете отключить JS Minifier (например, UglifyJS) и проверить вашу сборку с обычным grep
.