Для динамических сценариев не существует понятия «безопасный встроенный», попробуйте вместо него использовать динамический импорт? (вы можете перезагрузить такой скрипт в коде) ..
Обычно вам не нужно использовать «unsafe-inline», две вещи, которые часто становятся проблематичными, это живая перезагрузка в разработке и setTimeout / setInterval в вашем коде, они могут легко запускать CSP. Поэтому лучше просто отключить CSP в разработке, чтобы увеличить скорость доставки. «unsafe-inline» - включить выполнение динамически создаваемых сценариев.
Обновление
Чтобы решить эту проблему, вам нужно загрузить собственный скрипт, используя стандартные (возможно, с помощью async / defer) <script src="/myscript.js"></script>
и требование «unsafe-inline» отпадает. Тем не менее, ваш выбор технологии («веб-формы») может ограничить ваши возможности сделать это. В любом случае, для доставки сценария используйте URL-адрес cdn или отдельный сервер (внутренний или внешний). Я проверил это локально с помощью nodejs, и он работает как ожидалось. «Проблема», с которой вы столкнулись, вероятнее всего связана с тем, что вы пишете такой код (или код помещается туда):
<script>function unsafeInline() { ... }</script>
Modernizr теперь v3.6.0, вы используете v2.8.3, и чтобы устранить ошибку, вы можете добавить это в свой заголовок:
<header>
<title>CSP Test</title>
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://cdnjs.cloudflare.com/;">
<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js"></script>
</header>
Из связанного SO вопроса :
Если modernizr внедряет все эти встроенные вещи, чем кажется, что вы выбираете либо (a) добавить все эти хеши, (b) использовать «unsafe-inline» (но в основном это наносит ущерб всей цели CSP…), или (с) не используйте modernizr.
Ответ на этот вопрос таков: удалите «inline stuff» из modernizr. Вы всегда можете использовать document.body.style = "background: #000000;";
из внешней библиотеки, чтобы установить стиль (или другие) атрибуты. Я попробовал все "нормальные" действия кода в импортированном внешнем скрипте, и он не вызывает CSP. Под нормальным я также подразумеваю назначение объектов (функций) объекту окна и их выполнение.
Ищите * .createElement ("script") или аналогичный, поскольку это наверняка вызовет CSP.