Show Menu
화제×

CSP(콘텐츠 보안 정책)

CSP(콘텐츠 보안 정책)의 기본 목표는 XSS(교차 사이트 스크립팅)를 방지하는 것입니다. 이는 실제로는 알 수 없는 곳에서 가져온 것이지만 출처를 신뢰할 수 있는 것처럼 브라우저를 속여 악의적인 콘텐츠를 실행하게 할 때 발생합니다. CSP를 사용하면 브라우저(사용자를 대신하여)가 스크립트가 실제로 신뢰할 수 있는 소스에서 오고 있는지 확인할 수 있습니다.
CSP는 Content-Security-Policy HTTP 헤더를 서버 응답에 추가하여 구현합니다. Mozilla Developer Network 사이트 https://developer.mozilla.org/ko-KR/docs/Web/HTTP/CSP 에서 CSP에 대해 자세히 알아볼 수 있습니다.

극복해야 할 문제

Tag management 시스템은 스크립트를 동적으로 로드하도록 설계되었습니다. 보안 문제를 일으킬 수 있으므로 CSP는 동적으로 로드된 이러한 스크립트를 차단하도록 설계되었습니다.
Launch가 CSP와 작동하도록 하려면 극복해야 할 두 가지 주요 과제가 있습니다.
  • Launch 라이브러리의 소스는 신뢰할 수 있어야 합니다. 이 조건이 충족되지 않으면 Launch 라이브러리 및 기타 필수 JavaScript 파일이 브라우저에 의해 차단되고 페이지에서 로드되지 않습니다.
  • 인라인 스크립트를 허용해야 합니다. ​이 조건이 충족되지 않으면 맞춤형 코드 규칙 작업이 페이지에서 차단되며 제대로 실행되지 않습니다.
Launch를 사용하고​__ CSP를 제 위치에 보유하려면 다른 스크립트를 안전한 것으로 잘못 표시하지 않고 두 문제를 모두 해결해야 합니다. 강화된 보안은 부품 작업의 양을 늘린 대가입니다.

신뢰할 수 있는 소스

라이브러리를 자체 호스팅하고 있는 경우 라이브러리의 소스는 사용자의 도메인일 수 있습니다. 호스트 도메인이 다음과 같이 안전한 소스임을 지정할 수 있습니다.
script-src 'self'
Adobe에서 라이브러리를 호스팅하게 하는 경우(Adobe 호스트에서 관리하는 항목과 함께) 라이브러리는 assets.adobedtm.com에서 유지됩니다. 이 경우 다음과 같은 정책을 만들어야 합니다.
script-src 'self' assets.adobedtm.com
이미 로드하는 스크립트를 중단하지 않도록 안전한 도메인으로 self 을 지정해야 하지만 안전한 항목으로 나열해야 할 assets.adobedtm.com 이 필요하며 그렇지 않은 경우 Launch 라이브러리가 페이지에 로드되지 않습니다.
Mozilla Developer Network 사이트 에서 신뢰할 수 있는 소스에 대한 자세히 알아볼 수 있습니다.

인라인 스크립트

인라인 스크립트는 기본적으로 허용되지 않으므로 CSP에 대한 과제를 제공합니다. 인라인 스크립트를 허용하는 두 가지 옵션이 있습니다.
  • 모든 인라인 스크립트 허용(최소 보안)
  • 임시 허용(양호한 보안)
CSP 사양은 해시를 사용하는 세 번째 옵션에 대한 세부 사항을 가지고 있지만, 여러 가지 이유로 인해 TMS와 함께 사용할 수 없습니다. 이러한 옵션 중 일부는 매우 복잡합니다.

양호한 보안 - 임시

이 방법에는 임시 항목을 생성하여 CSP와 각 인라인 스크립트에 추가하는 작업이 포함됩니다. 브라우저가 인라인 스크립트를 포함하는 인라인 스크립트를 로드하라는 지침을 받으면 임시 값을 CSP 헤더 내에 포함된 값과 비교합니다. 일치하는 경우 스크립트가 로드됩니다.
이 임시 항목은 새 페이지를 로드할 때마다 변경해야 합니다.
Launch 라이브러리를 비동기식으로 로드해야 하는 중요한 전제 조건이 있습니다. 이는 Launch 라이브러리의 동기식 로드와 작동하지 않습니다(결과: 제대로 실행되지 않는 콘솔 오류 및 규칙).
다음과 같이 위의 Adobe 호스트 CSP 예제에 임시 항목을 추가할 수 있습니다.
script-src 'self' assets.adobedtm.com 'nonce-2726c7f26c'
그런 다음 임시 항목을 찾을 수 있는 Launch를 알 수 있습니다. Launch는 인라인 스크립트를 로드할 때 이를 사용합니다. 스크립트를 로드할 때 임시 항목을 사용하는 Launch의 경우 다음을 수행해야 합니다.
  1. 임시 항목을 참조하는 데이터 요소를 생성합니다(데이터 레이어에 배치할 때마다).
  2. Core Extension을 구성하고 사용한 데이터 요소를 지정합니다.
  3. 데이터 요소 및 Core Extension 변경 사항을 게시합니다.
한 가지 추가 참고 사항: 사용자 지정 코드의 로딩만 처리합니다. 사용자 지정 코드에서 수행하는 항목을 처리하지 않습니다. CSP를 준수하지 않는 사용자 지정 코드를 작성할 수 있습니다. 이 경우 CSP가 우선합니다. 예를 들어 사용자 지정 코드를 사용하여 인라인 스크립트를 DOM에 추가하여 로드하는 경우 Launch에서 해당 스크립트를 찾거나 임시 항목을 올바르게 추가할 수 없으므로 특정 사용자 지정 코드 작업이 예상대로 작동하지 않습니다.

낮은 보안 - 인라인 허용

위의 옵션이 작동하지 않는 경우 CSP에서 모든 인라인 스크립트를 허용하도록 지정할 수 있습니다. 이 옵션은 가장 안전하지 않은 옵션이지만 구현 및 유지 관리도 더 쉽습니다.
Adobe에서 호스팅을 관리하고 assets.adobedtm.com 도메인을 신뢰할 수 있는 소스로 표시한다고 가정할 경우 CSP는 다음과 같이 표시됩니다.
script-src 'self' assets.adobedtm.com 'unsafe-inline'
인라인 스크립트 허용에 대한 자세한 내용은 MDN 사이트에서 https://developer.mozilla.org/ko-KR/docs/Web/HTTP/Headers/Content-Security-Policy/script-src 를 참조하십시오.