이제 COEP를 사용하는 개발자는 COEP 자체를 사용하지 않는 서드 파티 iframe을 삽입할 수 있습니다.
COEP가 필요한 이유
일부 웹 API는 Spectre와 같은 측면 채널 공격의 위험을 증가시킵니다. 이러한 위험을 완화하기 위해 브라우저는 교차 출처 격리라는 선택 기반 격리된 환경을 제공합니다. 이 환경에서는 무엇보다도 COEP를 배포해야 합니다. 이를 통해 웹사이트는 SharedArrayBuffer
, performance.measureUserAgentSpecificMemory()
, 더 나은 해상도의 고정밀 타이머를 비롯한 권한이 있는 기능을 사용할 수 있습니다.
교차 도메인 격리를 사용 설정하려면 웹사이트에서 다음 두 HTTP 헤더를 전송해야 합니다.
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
COEP 사용 시의 과제
교차 출처 격리는 웹페이지의 보안을 강화하고 강력한 기능을 사용 설정할 수 있는 기능을 제공하지만 COEP를 배포하는 것은 어려울 수 있습니다. 가장 큰 과제 중 하나는 모든 교차 출처 iframe도 COEP 및 CORP를 배포해야 한다는 것입니다. 이러한 헤더가 없는 iframe은 브라우저에 의해 로드되지 않습니다.
iframe은 일반적으로 COEP를 쉽게 배포할 수 없는 서드 파티에서 제공합니다.
익명 iframe 문제 해결
이때 익명의 iframe이 필요합니다. anonymous
속성을 <iframe>
요소에 추가하면 iframe이 다른 임시 저장소 파티션에서 로드되며 더 이상 COEP 제한이 적용되지 않습니다.
예:
<iframe anonymous src="https://example.com">
iframe은 새로운 임시 컨텍스트에서 생성되며 최상위 웹사이트와 연결된 쿠키에는 액세스할 수 없습니다. 빈 쿠키 저장소에서 시작됩니다. 마찬가지로 LocalStorage
, CacheStorage
, IndexedDB
등의 스토리지 API는 새 임시 파티션에 데이터를 로드하고 저장합니다. 파티션은 현재 최상위 문서 및 iframe의 출처로 범위가 지정됩니다. 최상위 문서가 언로드되면 저장소가 삭제됩니다.
익명의 iframe에는 COEP 삽입 규칙이 적용되지 않습니다. 매번 새 빈 컨텍스트에서 로드되므로 여전히 안전합니다. 데이터가 맞춤설정되지 않은 상태로 로드됩니다. 공개 데이터만 포함되어 있으며 이는 공격자에게는 가치가 없습니다.
데모
익명의 iframe은 https://anonymous-iframe.glitch.me/에서 확인할 수 있습니다.
오리진 트라이얼 등록
익명의 iframe이 개발자가 교차 출처 격리를 채택하는 데 도움이 되도록 Chrome 버전 106~108에서 출처 체험판으로 제공됩니다.
웹사이트에서 익명 iframe을 사용하도록 하려면 오리진 트라이얼에 등록하세요.
- 원본의 토큰을 요청합니다.
- 다음 방법 중 하나로 토큰을 사용합니다.
- HTML:
html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
- JavaScript에서:
js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
- HTTP 헤더:
text Origin-Trial: TOKEN_GOES_HERE
- HTML:
- 페이지에 익명의 iframe을 추가합니다.
html <iframe anonymous src="https://example.com">
이 기능에 관한 의견이 있으면 GitHub 저장소에서 문제를 제출하세요.
서드 파티 오리진 트라이얼
서드 파티 스크립트에서도 출처 무료 체험을 사용할 수 있습니다. 페이지에 삽입된 스크립트로 사용 설정할 수 있습니다.
서드 파티 출처 체험판을 등록하는 방법을 자세히 알아보세요.
FAQ
이 기능이 다른 브라우저에서도 채택되나요?
iframe이 <iframe anonymous>
내부에 중첩되어 있나요?
예. 상속됩니다. iframe이 익명이 되면 anonymous
속성 없이도 전체 하위 트리의 모든 iframe에 적용됩니다.
<iframe anonymous>
에서 생성된 팝업도 익명인가요?
noopener
가 설정된 것처럼 팝업이 열립니다. 이러한 컨텍스트는 새 일반 최상위 컨텍스트에서 생성되며 익명이 아닙니다. 익명의 iframe과 통신할 수 없습니다.