DISCOURSE_CDN_URL がコンテンツセキュリティポリシー違反を引き起こす?

この設定をどう間違えているのか分かりません。なぜ私がこのバグのように見える問題に直面している唯一の人物なのか、理解できません。

yml ファイル内の env: セクションで、比較的標準的なマルチサイト設定において以下を定義しています。

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

すると、ブラウザが CSP エラーとしてすべての CDN URL を拒否してしまいます。

content security policy script src は「追加のホワイトリスト登録スクリプトソース。現在のホストと CDN はデフォルトで含まれます。詳細は Mitigate XSS Attacks with Content Security Policy を参照してください」と表示されます。しかし、これを定義したり(または discourse.conf に追加・削除して sv restart unicorn を実行しても)、以下のエラーが発生します。

content security policy report only を true に設定しても、サイトは依然として読み込まれません。

ブラウザがアセットを読み込むためには、content_security_policy を無効にするか、CDN URL を content security policy script src に追加する必要があるようです。

私の yml ファイルは こちら です。

「いいね!」 1

CDN URL はデフォルトで計算され、CSP に含める必要があります。また、ヘッダーで提供されている実際の CSP と、ブロックされたアセットのソースを(提供するか、比較してみてください)。

「いいね!」 6

ヘッダーは以下の通りです:

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:

コンテナ内の ENV 変数は以下の通りです:

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

discourse.conf からの CDN URL は以下の通りです:

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

「いいね!」 2

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 を優先して使用しています。これは CDN アセット URL の生成 と整合しています。

@pfaffman 貴サイトの GlobalSetting.use_s3?true を返しますか?

ここで追加の GlobalSetting.use_s3? チェックが必要ではないかと疑問に思っています。GlobalSetting.s3_cdn_url が存在することは、必ずしも GlobalSetting.use_s3? が真であることを意味するのでしょうか?アセット生成や S3 CDN について少し混乱しています :sweat_smile: この分野に詳しい方にもご確認いただけないでしょうか?よろしくお願いいたします。

「いいね!」 7

ええと、use_s3 を設定してから rake assets:precompile を実行しましたが、変化はありませんでした。

以前、アセットが S3 にあるのかローカルにあるのか(あるいはその CDN ミラーなのか)について混乱が生じ、同じような問題に遭遇したことがあります。

「いいね!」 1