У меня проблемы с CSP, выкидывающим нарушение там, где этого не должно быть. Это не должно быть проблемой, потому что у меня включен strict-dynamic
, и он работает в других браузерах. Однако Firefox имеет проблему с конкретным скриптом.
{
"csp-report": {
"blocked-uri": "inline",
"column-number": 373,
"document-uri": "https://mydomain.app/login",
"line-number": 52,
"original-policy": "default-src 'self' https://static.zdassets.com https://ekr.zdassets.com https://mydomain.zendesk.com wss://mydomain.zendesk.com wss://*.zopim.com https://*.adroll.com; font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com https://maxcdn.bootstrapcdn.com; style-src 'self' https://fonts.googleapis.com https://maxcdn.bootstrapcdn.com 'unsafe-inline'; img-src * https: data:; media-src 'self' https://static.zdassets.com; frame-src 'self' https://www.googletagmanager.com; script-src 'nonce-[removed]' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; report-uri https://mydomain.report-uri.com/r/d/csp/reportOnly",
"source-file": "https://s.adroll.com/j/roundtrip.js",
"violated-directive": "script-src"
}
}
Скрипт Adroll добавлен следующим образом:
<!-- AdRoll -->
<script type="text/javascript" nonce="{{ $scriptnonce }}">
...
var scr = document.createElement("script");
scr.src = host + "/j/roundtrip.js";
// manually adding this to try and solve the problem
scr.setAttribute('nonce', '{{ $scriptnonce }}');
</script>
Этот фрагмент предоставляется нам adroll и создает скрипт adroll тег в заголовке страницы. Одноразовый номер не нужен в блоке createElement()
, потому что здесь должен применяться strict-dynamic
, и мы уже поместили одноразовый номер в содержащий тег.
Кроме того, сценарий adroll, вызывающий нарушение, сам добавление тега сценария с createElement()
, который может вызывать нашу проблему, но опять же, я бы подумал, что strict-dynamic
справится с этим.
Наша политика довольно хорошо отлажена, мы не получаем ошибок в другом месте, и мы эффективно используем strict-dynamic
и nonces
во всем приложении.
Вы можете скопировать исходную политику в оценщик CSP Google, чтобы убедиться, что политика завершена.
Есть идеи, почему Firefox ведет себя так и как это исправить? Из-за этого скрипта нас заваливают отчетами!