Ошибка CSP при добавлении скрипта через компонент темы

Проблема с Strict Dynamic и CSP в виджете Atlassian

У меня возникла проблема с политикой безопасности контента (CSP) после обновления до версии v3.3.0.beta1. В частности, я пытаюсь внедрить виджет Atlassian в заголовок своего контейнера, который был создан до этого обновления.

Вот что я добавил в заголовок:

<script data-jsd-embedded nonce="{{content_security_policy_nonce}}" data-key="bla" data-base-url="https://jsd-widget.atlassian.com" src="https://jsd-widget.atlassian.com/assets/embed.js"></script>

Я убедился, что nonce включен, но сталкиваюсь со следующими ошибками:

embed.js:1 Отказано в установке базового URI документа в 'https://jsd-widget.atlassian.com/', так как это нарушает следующую директиву политики безопасности контента: "base-uri 'self'".

embed.js:1 Отказано в загрузке скрипта 'https://jsd-widget.atlassian.com/assets/iframe.js', так как это нарушает следующую директиву политики безопасности контента: "script-src 'nonce-YAnMdLzmoWqLis3WXiQKjxdHk' 'strict-dynamic'". Обратите внимание, что 'script-src-elem' не был явно установлен, поэтому в качестве запасного варианта используется 'script-src'.

Кроме того, я нашел предложение в предыдущем посте динамически загружать скрипт следующим образом:

javascript

var s = document.createElement('script');
s.src = "https://jsd-widget.atlassian.com/assets/embed.js";
document.body.appendChild(s);

Однако это, похоже, не решает проблему. Мне явно чего-то не хватает в понимании того, как strict-dynamic должен работать в этом контексте.

Может ли кто-нибудь помочь мне понять, почему возникают эти ошибки, и как их исправить? Любые рекомендации будут очень кстати!

Как ни странно, я как раз рассматривал почти идентичную проблему.

Мне удалось воспроизвести похожую проблему на последней версии, которая недавно была пересобрана.

Я получаю следующее сообщение:

[Только отчет] Отказано в загрузке скрипта 'https://www.mytestsite.com/mini-profiler-resources/includes.js?v=116e2a6fd81c286e004e2a0afb03baa1', так как это нарушает следующую директиву политики безопасности контента (CSP): "script-src 'nonce-ZSPIEwDBo6e07GuQMDkOFZerD' 'strict-dynamic'". Обратите внимание, что 'script-src-elem' не был явно задан, поэтому используется 'script-src' в качестве резервного варианта.

Может ли кто-нибудь из вас поделиться ссылкой на сайт, где наблюдается эта проблема? С радостью быстро взгляну :eyes:

Если вы добавили это через компоненты темы, то вам следует удалить часть nonce=. Discourse добавит её автоматически (и, как мне кажется, если вы добавите её сами, это может нарушить работу автоматической системы).

Закрываем этот вопрос — @merefield и я обсудили это в личных сообщениях и выяснили, что проблема связана именно с режимом «только отчет». Исправление здесь: FIX: Mini-profiler CSP nonce when in report-only mode by davidtaylorhq · Pull Request #28664 · discourse/discourse · GitHub

Похоже, это другая проблема, чем та, с которой столкнулся @devops1.

Привет, Дэвид! Большое спасибо за быстрый ответ.

Код, который я добавляю:
<script data-jsd-embedded data-key="bla" data-base-url="https://jsd-widget.atlassian.com" src="https://jsd-widget.atlassian.com/assets/embed.js"></script>

Я убрал nonce, как вы и просили.

Вот сайт: https://onlinecommunity.stroke.org.uk/
Я включил политику безопасности контента только для отчётов.

Включен ли компонент темы? Я не вижу скриптов Atlassian при проверке в инструментах разработчика.

Думаю, теперь это должно работать, я нашёл скрипт в исходном коде страницы.

Похоже, что скрипт embed.js выполняется успешно, поэтому сторона Discourse работает корректно.

Однако затем он пытается создать фрейм с тем же источником, который включает теги скриптов с пометкой ‘parser-inserted’. Подобная стратегия несовместима с CSP в режиме strict-dynamic.

Поэтому я считаю, что это проблема, которую должен исправить Atlassian. Я наткнулся на эту задачу в их трекере, которая кажется актуальной (хотя в ней мало деталей и нет решения :cry:)

Большое спасибо, что занялись этим вопросом для меня, Дэвид.