Verursacht DISCOURSE_CDN_URL Content-Security-Policy-Verstöße?

Ich weiß nicht, wie ich das so falsch mache. Ich kann nicht verstehen, warum ich der Einzige bin, der mit einem vermeintlichen Fehler konfrontiert ist.

Wenn ich

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

im env:-Abschnitt meiner yml-Datei für eine relativ Standard-Multisite-Konfiguration definiere, werden alle CDN-URLs vom Browser aufgrund eines CSP-Fehlers abgelehnt.

content security policy script src behauptet: „Zusätzlich freigegebene Skriptquellen. Der aktuelle Host und das CDN sind standardmäßig enthalten. Siehe XSS-Angriffe mit Content Security Policy abmildern.". Doch wenn ich es definiere (oder es in discourse.conf hinzufüge/entferne und sv restart unicorn ausführe), erhalte ich folgende Meldung:

Selbst wenn content security policy report only auf true gesetzt ist, wird die Seite nicht geladen.

Es scheint erforderlich zu sein, content_security_policy zu deaktivieren oder die CDN-URL zu content security policy script src hinzuzufügen, damit der Browser die Assets laden kann.

Hier ist meine yml-Datei.

1 „Gefällt mir“

CDN URLs should be computed and included in the CSP by default. Could you also provide (or try comparing) the actual CSP served in the header and the source of the blocked assets?

6 „Gefällt mir“

Here is the header:

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:

Here are the ENV variables inside the container:

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

Here is the CDN URL from discourse.conf:

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

and rails:

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

And here is the URL for one of the assets that won’t load: https://lcsupport-92e2.kxcdn.com/brotli_asset/preload-store-d32dcf974dddcac742f8a7a6aa7fcd686185920b201029d0ecb2b85527ef9034.js

2 „Gefällt mir“

So we have this in the CSP

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

But the actual address is

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

The relevant CSP code:

We prioritize using DISCOURSE_S3_CDN_URL for assets when available. This aligns with the CDN asset URL generation.

@pfaffman Does GlobalSetting.use_s3? return true for your site?

I wonder if we need an additional GlobalSetting.use_s3? check here. Does having GlobalSetting.s3_cdn_url necessarily imply GlobalSetting.use_s3?? I’m a bit hazy with asset genereation / S3 CDN now :sweat_smile: could someone more familiar with it also take a look? Thanks!

7 „Gefällt mir“

Well, I tried setting use_s3 and then rake assets:precompile and there’s no change.

I’ve somewhere else had this issue where there was confusion about whether assets were in s3 or local (or their CDN mirrors).

1 „Gefällt mir“