DISCOURSE_CDN_URL provoque-t-il des violations de la politique de sécurité du contenu ?

Je ne sais pas comment j’arrive à faire une telle erreur. Je ne vois pas comment je suis le seul à rencontrer ce qui ressemble à un bug.

Si je définis

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

dans la section env: de mon fichier yml pour une configuration multisite assez standard. Toutes les URL CDN sont rejetées par le navigateur en raison d’une erreur CSP.

content security policy script src indique « Sources de scripts supplémentaires autorisées. L’hôte actuel et le CDN sont inclus par défaut. Voir Atténuer les attaques XSS avec la politique de sécurité du contenu. », mais lorsque je le définis (ou que je l’ajoute/supprime de discourse.conf et que je redémarre sv restart unicorn), j’obtiens ceci :

même avec content security policy report only défini sur true, le site ne se charge toujours pas.

Désactiver content_security_policy ou ajouter l’URL du CDN à content security policy script src semble nécessaire pour que le navigateur charge les ressources.

ici se trouve mon fichier yml.

Les URL de CDN doivent être calculées et incluses dans la CSP par défaut. Pourriez-vous également fournir (ou essayer de comparer) la CSP réellement servie dans l’en-tête et la source des ressources bloquées ?

Voici l’en-tête :

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:

Voici les variables d’environnement à l’intérieur du conteneur :

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

Voici l’URL du CDN depuis discourse.conf :

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

et rails :

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

Et voici l’URL de l’une des ressources qui ne se charge pas : https://lcsupport-92e2.kxcdn.com/brotli_asset/preload-store-d32dcf974dddcac742f8a7a6aa7fcd686185920b201029d0ecb2b85527ef9034.js

Donc nous avons ceci dans la CSP

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

Mais l’adresse réelle est

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

Le code CSP pertinent :

Nous privilégions l’utilisation de DISCOURSE_S3_CDN_URL pour les assets lorsque cela est possible. Cela est cohérent avec la génération des URL d’assets CDN.

@pfaffman Est-ce que GlobalSetting.use_s3? renvoie true pour votre site ?

Je me demande si nous avons besoin d’une vérification supplémentaire GlobalSetting.use_s3? ici. Le fait d’avoir GlobalSetting.s3_cdn_url implique-t-il nécessairement GlobalSetting.use_s3? ? Je suis un peu perdu concernant la génération d’assets / le CDN S3 actuellement :sweat_smile: quelqu’un de plus familier avec cela pourrait-il aussi jeter un œil ? Merci !

Eh bien, j’ai essayé de définir use_s3, puis d’exécuter rake assets:precompile, mais rien n’a changé.

J’ai déjà rencontré ce problème ailleurs, où il y avait une confusion quant à savoir si les assets étaient sur S3 ou en local (ou leurs miroirs CDN).