DISCOURSE_CDN_URL causa violazioni delle policy di sicurezza dei contenuti?

Non so come stia sbagliando. Non capisco come io sia l’unico ad affrontare ciò che sembra un bug.

Se definisco

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

nella sezione env: del mio file yml per una configurazione multisito abbastanza standard, tutti gli URL CDN vengono rifiutati dal browser a causa di un errore CSP.

content security policy script src afferma “Ulteriori origini script consentite. L’host corrente e il CDN sono inclusi per impostazione predefinita. Vedi Mitigare gli attacchi XSS con la Content Security Policy.”, ma quando lo definisco (o lo aggiungo/rimuovo da discourse.conf e riavvio sv restart unicorn), ottengo questo:

anche con content security policy report only impostato su true, il sito non si carica comunque.

Sembra necessario disattivare content_security_policy o aggiungere l’URL del CDN a content security policy script src affinché il browser carichi le risorse.

Qui trovi il mio file yml.

Gli URL del CDN dovrebbero essere calcolati e inclusi nella CSP per impostazione predefinita. Potresti anche fornire (o provare a confrontare) la CSP effettiva inviata nell’intestazione e l’origine delle risorse bloccate?

Ecco l’intestazione:

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:

Ecco le variabili d’ambiente all’interno del contenitore:

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

Ecco l’URL del CDN da discourse.conf:

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

e rails:

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

Ecco l’URL per una delle risorse che non si carica: https://lcsupport-92e2.kxcdn.com/brotli_asset/preload-store-d32dcf974dddcac742f8a7a6aa7fcd686185920b201029d0ecb2b85527ef9034.js

Quindi abbiamo questo nella CSP

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

Ma l’indirizzo effettivo è

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

Il codice CSP rilevante:

Diamo priorità all’uso di DISCOURSE_S3_CDN_URL per le risorse quando è disponibile. Questo è coerente con la generazione degli URL delle risorse CDN.

@pfaffman GlobalSetting.use_s3? restituisce true per il tuo sito?

Mi chiedo se sia necessario aggiungere un ulteriore controllo GlobalSetting.use_s3? qui. Il fatto che GlobalSetting.s3_cdn_url sia presente implica necessariamente GlobalSetting.use_s3?? Al momento sono un po’ confuso riguardo alla generazione delle risorse e alla CDN S3 :sweat_smile: potrebbe qualcuno più familiare con l’argomento dare un’occhiata? Grazie!

Bene, ho provato a impostare use_s3 e poi eseguire rake assets:precompile, ma non c’è stato alcun cambiamento.

Altrove ho avuto questo problema, in cui c’era confusione su whether gli asset fossero su S3 o locali (o sui loro mirror CDN).