이제 COEP를 사용하는 개발자는 COEP 자체를 사용하지 않는 서드 파티 iframe을 삽입할 수 있습니다.
COEP가 필요한 이유
일부 웹 API는 스펙터와 같은 부채널 공격의 위험을 높입니다. 이러한 위험을 완화하기 위해 브라우저는 교차 출처 격리라고 하는 선택 기반 격리 환경을 제공합니다. 무엇보다도 COEP를 배포해야 합니다. 이를 통해 웹사이트에서 SharedArrayBuffer
, performance.measureUserAgentSpecificMemory()
, 해상도가 더 높은 고정밀 타이머 등 권한이 있는 기능을 사용할 수 있습니다.
교차 출처 격리를 사용 설정하려면 웹사이트에서 다음 2개의 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">
- 자바스크립트에서:
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 anonymous>
내부에 중첩된 iframe은 익명처리되나요?
예. 상속되었습니다. iframe이 익명 상태가 되면 anonymous
속성 없이도 전체 하위 트리의 모든 iframe에 적용됩니다.
<iframe anonymous>
에서 생성되는 팝업도 익명으로 처리되나요?
noopener
가 설정된 것처럼 팝업이 열립니다. 새로운 일반 최상위 컨텍스트에서 생성되며 익명이 아닙니다. 익명 iframe과 통신할 수 없습니다.