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

아르투르 손초니
아서 손초니

이제 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을 사용하도록 오리진 트라이얼에 등록합니다.

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

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

서드 파티 오리진 트라이얼

오리진 트라이얼은 서드 파티 스크립트에서도 사용할 수 있습니다. 즉, 페이지에 삽입된 스크립트에 의해 사용 설정될 수 있습니다.

서드 파티 오리진 트라이얼에 등록하는 방법을 자세히 알아보세요.

FAQ

이 기능을 다른 브라우저에서도 사용할 수 있나요?

<iframe anonymous> 내부에 중첩된 iframe은 익명처리되나요?

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

<iframe anonymous>에서 생성되는 팝업도 익명으로 처리되나요?

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

자료