DISCOURSE_CDN_URL вызывает нарушения политики безопасности контента?

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

Если я определяю

  DISCOURSE_CDN_URL: https://lcsupport-92e2.kxcdn.com

в блоке env: в моём файле yml для довольно стандартной мультисайтовой конфигурации, все CDN-URL-адреса отклоняются браузером с ошибкой CSP.

content security policy script src утверждает: «Дополнительные разрешённые источники скриптов. По умолчанию включены текущий хост и CDN. См. Смягчение атак XSS с помощью Content Security Policy», но когда я определяю его (или добавляю/удаляю из discourse.conf и выполняю sv restart unicorn), получаю следующее:

Даже при установке content security policy report only в true сайт всё равно не загружается.

Кажется, чтобы браузер загрузил ресурсы, необходимо либо отключить content_security_policy, либо добавить URL CDN в content security policy script src.

Здесь находится мой файл yml.

URL-адреса CDN должны по умолчанию вычисляться и включаться в CSP. Не могли бы вы также предоставить (или попробовать сравнить) фактическую CSP, отправляемую в заголовке, и источник заблокированных ресурсов?

Вот заголовок:

content-security-policy-report-only: base-uri 'none'; object-src 'none'; script-src 'report-sample' 
https://support.literatecomputing.com/logs/ 
https://support.literatecomputing.com/sidekiq/ 
https://support.literatecomputing.com/mini-profiler-resources/ 
https://abedmulti-92e2.kxcdn.com/uploads/assets/ 
https://abedmulti-92e2.kxcdn.com/uploads/brotli_asset/ 
https://support.literatecomputing.com/extra-locales/ 
https://lcsupport-92e2.kxcdn.com/highlight-js/ 
https://lcsupport-92e2.kxcdn.com/javascripts/ 
https://lcsupport-92e2.kxcdn.com/plugins/ 
https://lcsupport-92e2.kxcdn.com/theme-javascripts/ 
https://lcsupport-92e2.kxcdn.com/svg-sprite/ 
https://www.google-analytics.com/analytics.js 
https://tagmanager.google.com/ 
https://www.googletagmanager.com/; worker-src 'self' blob:

Вот переменные окружения внутри контейнера:

root@support-multi:/var/www/discourse# echo $DISCOURSE_S3_UPLOAD_BUCKET 
abed-multi/uploads
root@support-multi:/var/www/discourse# echo $DISCOURSE_S3_CDN_URL 
https://abedmulti-92e2.kxcdn.com/uploads

Вот URL CDN из discourse.conf:

cdn_url = 'https://lcsupport-92e2.kxcdn.com'

и rails:

[1] pry(main)> GlobalSetting.cdn_url
=> "https://lcsupport-92e2.kxcdn.com"

А вот URL одного из ресурсов, который не загружается: https://lcsupport-92e2.kxcdn.com/brotli_asset/preload-store-d32dcf974dddcac742f8a7a6aa7fcd686185920b201029d0ecb2b85527ef9034.js

Итак, у нас в CSP указано:

https://abedmulti-92e2.kxcdn.com/uploads/assets/
https://abedmulti-92e2.kxcdn.com/uploads/brotli_asset/
# т.е. DISCOURSE_S3_CDN_URL + /brotli_asset/

Но фактический адрес:

https://lcsupport-92e2.kxcdn.com/brotli_asset/preload-store-d32dcf974dddcac742f8a7a6aa7fcd686185920b201029d0ecb2b85527ef9034.js
# т.е. DISCOURSE_CDN_URL + /brotli_asset/...

Соответствующий код CSP:

Мы приоритизируем использование DISCOURSE_S3_CDN_URL для ассетов, когда оно доступно. Это соответствует генерации URL ассетов CDN.

@pfaffman Возвращает ли GlobalSetting.use_s3? значение true для вашего сайта?

Мне интересно, не нужно ли здесь добавить дополнительную проверку GlobalSetting.use_s3?. Обязательно ли наличие GlobalSetting.s3_cdn_url подразумевает GlobalSetting.use_s3?? Сейчас я немного запутался в генерации ассетов / S3 CDN :sweat_smile: Не мог бы кто-то, кто лучше знаком с этим, тоже взглянуть? Спасибо!

Что ж, я попробовал установить use_s3 и затем выполнить rake assets:precompile, но изменений нет.

У меня уже возникала подобная проблема, когда было непонятно, находятся ли ассеты в S3 или локально (или их копии в CDN).