익명 iframe 오리진 트라이얼: COEP 환경에 간편하게 iframe 삽입

Arthur Sonzogni
Arthur Sonzogni

이제 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을 사용하도록 하려면 오리진 트라이얼에 등록하세요.

  1. 원본의 토큰을 요청합니다.
  2. 다음 방법 중 하나로 토큰을 사용합니다.
    • 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
  3. 페이지에 익명의 iframe을 추가합니다. html <iframe anonymous src="https://example.com">

이 기능에 관한 의견이 있으면 GitHub 저장소에서 문제를 제출하세요.

서드 파티 오리진 트라이얼

서드 파티 스크립트에서도 출처 무료 체험을 사용할 수 있습니다. 페이지에 삽입된 스크립트로 사용 설정할 수 있습니다.

서드 파티 출처 체험판을 등록하는 방법을 자세히 알아보세요.

FAQ

이 기능이 다른 브라우저에서도 채택되나요?

iframe이 <iframe anonymous> 내부에 중첩되어 있나요?

예. 상속됩니다. iframe이 익명이 되면 anonymous 속성 없이도 전체 하위 트리의 모든 iframe에 적용됩니다.

<iframe anonymous>에서 생성된 팝업도 익명인가요?

noopener가 설정된 것처럼 팝업이 열립니다. 이러한 컨텍스트는 새 일반 최상위 컨텍스트에서 생성되며 익명이 아닙니다. 익명의 iframe과 통신할 수 없습니다.

리소스