¿DISCOURSE_CDN_URL causa violaciones de la política de seguridad del contenido?

No sé cómo estoy cometiendo este error. No puedo entender por qué soy el único que enfrenta lo que parece ser un error.

Si defino

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

en la sección env: de mi archivo yml para una configuración multisitio bastante estándar, todas las URLs del CDN son rechazadas por el navegador debido a un error de CSP.

content security policy script src afirma: “Fuentes de script adicionales permitidas. El host actual y el CDN están incluidos de forma predeterminada. Consulte Mitigar ataques XSS con Content Security Policy.”, pero cuando lo defino (o lo agrego/quito de discourse.conf y ejecuto sv restart unicorn), obtengo esto:

incluso con content security policy report only establecido en true, el sitio aún no carga.

Parece que es necesario desactivar content_security_policy o agregar la URL del CDN a content security policy script src para que el navegador cargue los recursos.

Aquí está mi archivo yml.

Las URLs del CDN deben calcularse e incluirse en la CSP de forma predeterminada. ¿Podrías proporcionar (o intentar comparar) la CSP real servida en la cabecera y el origen de los recursos bloqueados?

Aquí está el encabezado:

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:

Aquí están las variables de entorno dentro del contenedor:

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

Aquí está la URL del CDN de discourse.conf:

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

y en rails:

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

Y aquí está la URL de uno de los activos que no se carga: https://lcsupport-92e2.kxcdn.com/brotli_asset/preload-store-d32dcf974dddcac742f8a7a6aa7fcd686185920b201029d0ecb2b85527ef9034.js

Así que tenemos esto en la CSP

https://abedmulti-92e2.kxcdn.com/uploads/assets/ 
https://abedmulti-92e2.kxcdn.com/uploads/brotli_asset/
# es decir, DISCOURSE_S3_CDN_URL + /brotli_asset/

Pero la dirección real es

https://lcsupport-92e2.kxcdn.com/brotli_asset/preload-store-d32dcf974dddcac742f8a7a6aa7fcd686185920b201029d0ecb2b85527ef9034.js
# es decir, DISCOURSE_CDN_URL + /brotli_asset/...

El código CSP relevante:

Priorizamos el uso de DISCOURSE_S3_CDN_URL para los activos cuando está disponible. Esto se alinea con la generación de URLs de activos CDN.

@pfaffman ¿GlobalSetting.use_s3? devuelve true para tu sitio?

Me pregunto si necesitamos una verificación adicional de GlobalSetting.use_s3? aquí. ¿Tener GlobalSetting.s3_cdn_url implica necesariamente GlobalSetting.use_s3?? Ahora mismo estoy un poco confuso con la generación de activos / S3 CDN :sweat_smile: ¿podría alguien más familiarizado con esto echar un vistazo también? ¡Gracias!

Bueno, intenté configurar use_s3 y luego ejecutar rake assets:precompile, pero no hubo ningún cambio.

En otro lugar, tuve este problema donde hubo confusión sobre si los activos estaban en S3 o locales (o sus espejos en CDN).