을 CSP 스크립트 src 목록에 추가했고, 그제서야 Google AdSense 광고가 표시되기 시작했습니다 (AdSense 플러그인이 설치되어 있는데도 여전히 이렇게 해야 하는 것에 약간 놀랐습니다). 그런데 주목할 점은 House Ads를 100%로 설정했을 때(즉, 제 스크립트만 호출되도록 했을 때) CSP에서 문제가 있다는 알림이 전혀 없다는 것입니다. 그래서 다시 혼란스러운 상태로 돌아갔습니다. House Ad 코드는 HTML에 (인코딩되어) 있으며, 브라우저 검사 뷰에서는 위에서와 같이 표시됩니다.
CSP 경고를 트리거하지 않으면서 출력을 차단하는 것이 있을까요?
출력은 광고 공간을 생성하기 위해 document.write를 사용합니다. 이것이 원인이 아닐까 추측하고 있습니다. 출력은 다음과 같습니다:
올바른 해결 방법은 인라인을 사용하지 않고, 기존 EmberJS 템플릿의 아웃렛에 연결되도록 재작성하는 것입니다. 임시적인 해결책을 찾고 있다면, 커스텀 광고 솔루션에 변경 사항을 적용하는 동안 사이트 설정에서 CSP를 비활성화할 수 있습니다. 다만, 이로 인해 XSS 공격에 노출될 수 있다는 점을 유의하시기 바랍니다.
Discourse는 단일 페이지 애플리케이션(SPA)이며, 모든 페이지 마크업은 EmberJS 애플리케이션을 통해 클라이언트 사이드에서 생성됩니다.
document.write와 같은 직접적인 DOM 조작은 전체 구조와 정면으로 충돌하며, 단순히 작동할 가능성은 매우 낮습니다.
광고 시스템을 공식 Ad 플러그인의 House Ads 시스템에 맞게 조정해 보시는 것을 권장합니다. House Ads 인벤토리에 단일 광고를 배치하고, page change 훅을 사용하여 광고 서버에 연락한 후 응답으로 광고를 교체하는 방식도 고려해 볼 수 있습니다. 아니면 광고 시스템이 API를 통해 House Ads 인벤토리에 직접 데이터를 기록할 수 있도록 할 수도 있습니다.
도와주셔서 감사합니다, Falco. 조금 무섭긴 하지만, 이 광고 서버의 코드베이스는 API라는 용어가 만들어지기 전에 작성된 것이어서… 결국 처음부터 완전히 새로운 광고 서버 시스템을 작성하는 것이 더 나을 것 같습니다. 하지만 지금은 이 새로운 포럼과 6개 이상의 새로운 콘텐츠 사이트를 배포해야 해서 그럴 시간이 없습니다.
document.write를 대체할 다른 옵션들을 시도해보고, 그것이 작동할 수 있는지 확인해 보겠습니다.