사용자 인증 정보가 없는 iframe: COEP 환경에 간편하게 iframe 삽입

Arthur Sonzogni
Arthur Sonzogni

COEP를 사용하는 개발자는 이제 COEP 자체를 사용하지 않는 서드 파티 iframe을 삽입할 수 있습니다.

사용자 인증 정보 없는 iframe은 Chrome 버전 110부터 기본적으로 사용 설정됩니다. 이 API는 Cross-Origin-Embedder-Policy (COEP)를 사용하는 개발자가 COEP를 설정하지 않은 서드 파티 iframe을 삽입하는 것과 같은 가장 일반적인 불만사항을 해결합니다.

COEP가 필요한 이유

일부 웹 API는 Spectre와 같은 부채널 공격의 위험을 높입니다. 이러한 위험을 완화하기 위해 브라우저는 COEP를 배포해야 하는 교차 출처 격리라는 선택 기반의 격리 환경을 제공합니다. 교차 출처 분리를 사용하면 웹사이트에서 SharedArrayBuffer, performance.measureUserAgentSpecificMemory(), 해상도가 더 높은 고정밀 타이머를 비롯한 권한 있는 기능을 사용할 수 있습니다.

교차 출처 분리를 사용 설정하려면 웹사이트에서 다음 HTTP 헤더를 전송해야 합니다.

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

COEP:credentiallessrequire-corp 대신 사용할 수도 있습니다. 자세한 내용은 문서를 참고하세요.

COEP 사용 시의 과제

교차 출처 격리는 웹페이지의 보안과 강력한 기능을 지원하는 기능을 제공하지만 COEP를 배포하는 것은 어려울 수 있습니다. 가장 큰 과제 중 하나는 모든 교차 출처 iframe이 COEP 및 CORP를 배포해야 한다는 점입니다. 이러한 헤더가 없는 Iframe은 브라우저에 의해 로드되지 않습니다.

사용자 인증 정보가 없는 iframe

COEP를 설정하지 않은 서드 파티 iframe을 삽입할 수 있도록 <iframe credentialless>가 도입됩니다. credentialless 속성을 <iframe> 요소에 추가하면 iframe이 다른 빈 컨텍스트에서 로드됩니다. 특히 쿠키 없이 로드됩니다. 이를 통해 COEP 제한을 제거할 수 있습니다.

예:

<iframe credentialless src="https://example.com">

이 iframe은 새로운 임시 컨텍스트에서 생성되며 최상위 웹사이트와 연결된 쿠키에는 액세스할 수 없습니다. 대신 빈 쿠키 단지로 시작합니다. 마찬가지로 LocalStorage, CacheStorage, IndexedDB 등의 스토리지 API는 새 임시 파티션에 데이터를 로드하고 저장합니다. 파티션의 범위가 현재 최상위 문서 및 iframe 원본 모두로 지정됩니다. 최상위 문서가 언로드되면 이러한 저장공간이 모두 지워집니다.

사용자 인증 정보가 없는 iframe에는 COEP 삽입 규칙이 적용되지 않습니다. 여전히 안전합니다. 항상 새로운 빈 컨텍스트에서 로드되기 때문에 개인화된 데이터를 포함해서는 안 됩니다. 공격자가 노리는 목표입니다. iframe에 공개 데이터만 포함되어 있으면 공격자가 가치가 없습니다.

데모

사용자 인증 정보가 없는 iframe 데모를 확인하세요.

FAQ

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

<iframe>가 사용자 인증 정보가 없는 <iframe credentialless> 내에 중첩되어 있나요?

예. 상속됩니다. 사용자 인증 정보가 없는 iframe은 credentialless 속성이 없어도 전체 하위 트리에 있는 모든 iframe에 적용됩니다.

<iframe credentialless>에서 생성된 팝업도 사용자 인증 정보가 없나요?

noopener가 설정된 것처럼 팝업이 열립니다. 새로운 일반 최상위 컨텍스트에서 생성되며 사용자 인증 정보가 없습니다. 사용자 인증 정보가 없는 iframe과 통신할 수 없습니다.

문서가 사용자 인증 정보가 없는 iframe에 삽입되었는지 어떻게 감지하나요?

window.credentialless는 사용자 인증 정보가 없는 iframe 내부에서는 true이고 그렇지 않으면 false입니다. 이 값은 <iframe credentialless>을 지원하지 않는 웹브라우저에서 undefined입니다.

리소스