テーマコンポーネント経由でスクリプトを追加する際のCSPエラー

AtlassianウィジェットにおけるStrict DynamicとCSPの問題

v3.3.0.beta1にアップデートした後、Content Security Policy(CSP)で問題が発生しています。具体的には、このアップデートより前に作成されたコンテナのヘッダーにAtlassianウィジェットを埋め込もうとしています。

ヘッダーに追加したのは以下の通りです。

<script data-jsd-embedded nonce="{{content_security_policy_nonce}}" data-key="bla" data-base-url="https://jsd-widget.atlassian.com" src="https://jsd-widget.atlassian.com/assets/embed.js"></script>

nonceを含めるようにしましたが、以下のエラーが発生しています。

embed.js:1 Refused to set the document's base URI to 'https://jsd-widget.atlassian.com/' because it violates the following Content Security Policy directive: "base-uri 'self'".

embed.js:1 Refused to load the script 'https://jsd-widget.atlassian.com/assets/iframe.js' because it violates the following Content Security Policy directive: "script-src 'nonce-YAnMdLzmoWqLis3WXiQKjxdHk' 'strict-dynamic'". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.

さらに、以前の投稿で次のようにスクリプトを動的に読み込むという提案を見かけました。

var s = document.createElement('script');
s.src = "https://jsd-widget.atlassian.com/assets/embed.js";
document.body.appendChild(s);

しかし、これは問題を解決しないようです。このコンテキストでstrict-dynamicがどのように機能するのか、何か見落としているようです。

これらのエラーが発生する理由と、それを解決する方法を教えていただけますでしょうか?何かアドバイスがあれば幸いです!

「いいね!」 3

面白いことに、私もほぼ同じような問題を調べていました。

最近再構築された最新バージョンで同様の問題を再現できます。

以下のようなメッセージが表示されます。

[Report Only] Refused to load the script 'https://www.mytestsite.com/mini-profiler-resources/includes.js?v=116e2a6fd81c286e004e2a0afb03baa1' because it violates the following Content Security Policy directive: "script-src 'nonce-ZSPIEwDBo6e07GuQMDkOFZerD' 'strict-dynamic'". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
「いいね!」 3

この問題を示しているサイトへのリンクを共有していただけますか?すぐに確認させていただきます :eyes:

テーマコンポーネント経由で追加した場合、nonce= の部分は削除してください。Discourse が自動的に追加します(ご自身で追加すると、自動システムが壊れる可能性があると思います)。

「いいね!」 3

これについてループを閉じます - @merefield と私はプライベートメッセージで話し合い、レポート専用の問題であることを突き止めました。修正はこちらです: FIX: Mini-profiler CSP nonce when in report-only mode by davidtaylorhq · Pull Request #28664 · discourse/discourse · GitHub

したがって、これは @devops1 が見ている問題とは異なる問題のようです。

「いいね!」 4

デイビッド様

迅速なご対応ありがとうございます。

追加するコードは以下の通りです。
<script data-jsd-embedded data-key="bla" data-base-url="https://jsd-widget.atlassian.com" src="https://jsd-widget.atlassian.com/assets/embed.js"></script>

ご要望の通り、nonceは削除しました。

サイトはこちらです。https://onlinecommunity.stroke.org.uk/
コンテンツセキュリティポリシーのレポートのみをオンにしました。

「いいね!」 2

テーマコンポーネントは有効になっていますか?開発者ツールで確認しても、Atlassianスクリプトが表示されません。

「いいね!」 1

これで機能するはずです。ページソースでスクリプトを見つけました。

「いいね!」 2

embed.js スクリプトは正常に実行されているようですので、Discourse 側は機能しています。

しかし、その後、same-origin iframe を作成しようとしており、それには ‘parser-inserted’ スクリプトタグが含まれています。この種の戦略は、strict-dynamic CSP と互換性がありません。

したがって、これは Atlassian が修正する必要があるものだと思います。彼らのトラッカーで この問題 を見つけましたが、関連しているようです(ただし、詳細はあまりなく、解決策もありません :cry:)。

「いいね!」 2

David、問題の調査にご協力いただきありがとうございます。

「いいね!」 2

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.