Discourse でテーマ、プラグイン、外部スクリプトを安全に統合することをはるかに容易にする新しい「strict-dynamic」CSP を実験しています。
「content security policy strict dynamic」 サイト設定を有効にすることで、新しいモードを試すことができます。フィードバックがありましたらお知らせください!
将来的にはこれをデフォルトにする予定であり、その目標に近づくにつれて Announcements トピックを作成します。
詳細については、以下を参照してください。
背景
2018年に、Discourse のデフォルトの Content Security Policy を導入しました。当時、ブラウザのサポートポリシーにより、‘host-source’ 値(つまり、許可されるすべてのスクリプトの URL プレフィックスをリストする)しか使用できませんでした。
2024 年現在、より多くのオプションが利用可能になりました。具体的には、'strict-dynamic' キーワードです。これにより、すべてのスクリプト URL を事前にリストする必要がなくなります。代わりに、最初に信頼されたスクリプト(‘hash’ または ‘nonce’ 値経由)は、最小限の制限でさらに多くのスクリプトを読み込むことができます。
この新しいモードを試すにはどうすればよいですか?
管理パネルで 「content security policy strict dynamic」 設定を有効にします。
設定が表示されない場合は、最新バージョンの Discourse を実行していることを確認してください。新機能は、(3.3.0.beta1-dev サイクル中に) 2 月 16 日にマージされました。
ホスティングをご利用で、アップデートを早めたい場合は、お知らせください!
新しい設定を有効にするとどうなりますか?
Content-Security-Policy の script-src ディレクティブが、単一の nonce- 値と 'strict-dynamic' キーワードを含むように更新されます。
コアおよびテーマ内のすべての初期 \u003cscript\u003e タグには、適切な nonce= 属性が自動的に付与されます。管理者やテーマ開発者が追加作業を行う必要はありません。
独自のカスタム \u003cscript\u003e タグを挿入するプラグインは、この新しいモードをサポートするために更新する必要があります(例:)。この問題の広がりに関するデータを収集しており、必要に応じて開発者にガイダンスを提供します。
テーマやプラグインが提供するホストソース値は自動的に無視されます(ブラウザはホストソースと strict-dynamic を同時にサポートしていません)。
GTM、分析、広告などの外部スクリプトはどうなりますか?
追加の設定なしで、そのまま動作するはずです。問題が発生した場合はお知らせください!
元に戻すことはできますか?
はい!実験中は、設定をオン/オフでき、変更はすぐに有効になります。
ポリシーの例
この変更前の Discourse ポリシーの例:
upgrade-insecure-requests;
base-uri 'self';
object-src 'none';
script-src https://meta.discourse.org/logs/ https://meta.discourse.org/sidekiq/ https://meta.discourse.org/mini-profiler-resources/ https://d11a6trkgmumsb.cloudfront.net/assets/ https://meta.discourse.org/extra-locales/ https://d3bpeqsaub0i6y.cloudfront.net/highlight-js/ https://d3bpeqsaub0i6y.cloudfront.net/javascripts/ https://d3bpeqsaub0i6y.cloudfront.net/plugins/ https://d3bpeqsaub0i6y.cloudfront.net/theme-javascripts/ https://d3bpeqsaub0i6y.cloudfront.net/svg-sprite/ 'sha256-8uAKDaK4QxxCeYZl0Wxad2Nnj2tgKyA14hYBh66pnn0=' 'sha256-QFlnYO2Ll+rgFRKkUmtyRublBc7KFNsbzF7BzoCqjgA=';
worker-src 'self' https://d11a6trkgmumsb.cloudfront.net/assets/ https://d3bpeqsaub0i6y.cloudfront.net/javascripts/ https://d3bpeqsaub0i6y.cloudfront.net/plugins/;
frame-ancestors 'self';
manifest-src 'self';
この変更後の Discourse ポリシーの例:
upgrade-insecure-requests;
base-uri 'self';
object-src 'none';
script-src 'nonce-78uQrKOCg78iGuMAwCq2lI9E7' 'strict-dynamic';
frame-ancestors 'self';
manifest-src 'self';