테마 컴포넌트를 통해 스크립트를 추가할 때 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.

또한, 이전 게시물에서 스크립트를 다음과 같이 동적으로 로드하라는 제안도 확인했습니다:

javascript

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

하지만 이 방법으로도 문제가 해결되지 않습니다. 이 컨텍스트에서 strict-dynamic이 어떻게 작동해야 하는지에 대해 제가 분명히 놓치고 있는 부분이 있는 것 같습니다.

이러한 오류가 발생하는 이유와 해결 방법에 대해 도움을 주실 수 있을까요? 조언을 주시면 감사하겠습니다!

재밌는ことに, 저는 거의 동일한 문제를 보고 있었습니다.

최근에 다시 빌드된 최신 버전에서 비슷한 문제를 재현할 수 있습니다.

아래와 같은 오류가 발생합니다:

[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.

혹시 이 문제를 보여주는 사이트 링크를 공유해 주실 수 있을까요? 간단히 확인해 드릴게요 :eyes:

이 내용을 테마 컴포넌트를 통해 추가했다면 nonce= 부분을 제거해야 합니다. Discourse가 자동으로 추가하므로(직접 추가하면 자동 시스템이 깨질 수 있다고 생각합니다) 직접 넣지 않는 것이 좋습니다.

이 문제를 마무리하겠습니다. @merefield와 개인 메시지로 논의한 결과, report-only에 특화된 문제로 확인되었습니다. 수정 사항은 여기 있습니다: FIX: Mini-profiler CSP nonce when in report-only mode - Pull Request #28664 - discourse/discourse - GitHub

따라서 이는 @devops1이 보고한 문제와 다른 것으로 보입니다.

데이비드님, 감사합니다.
빠른 답변 주셔서 감사합니다.

추가하려는 코드는 다음과 같습니다.
<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/ 입니다.
콘텐츠 보안 정책(CSP)을 보고 전용(report only) 모드로 설정해 두었습니다.

테마 구성 요소가 활성화되어 있나요? 개발자 도구를 확인해 보았을 때 Atlassian 스크립트를 찾을 수 없습니다.

페이지 소스에서 스크립트를 찾았으니 이제 잘 작동할 것 같습니다.

embed.js 스크립트가 성공적으로 실행되고 있는 것으로 보이므로, Discourse 쪽은 정상적으로 작동하고 있습니다.

하지만 그다음에 same-origin iframe을 생성하려고 하며, 여기에는 ‘parser-inserted’ 스크립트 태그가 포함되어 있습니다. 이러한 방식은 strict-dynamic CSP와 호환되지 않습니다.

따라서 이것은 Atlassian에서 수정해야 할 문제라고 생각합니다. 그들의 트래커에서 관련이 있어 보이는 이 이슈를 발견했는데, (상세 정보가 부족하고 해결책도 제시되어 있지 않습니다 :cry:) 관련성이 있어 보입니다.

데이비드, 문제를 확인해 주셔서 정말 감사합니다.