same-origin으로의 Wasm 모듈 공유 제한

동일한 사이트 환경 간에 WebAssembly 모듈을 공유하는 경우 동일한 출처로 제한됩니다.

동일 사이트이지만 교차 출처 환경 간에 WebAssembly (Wasm) 모듈을 공유하면 지원 중단되어 에이전트 클러스터를 장기적으로 출처로 범위를 지정할 수 있습니다 이러한 환경에서 Wasm 모듈을 사용하는 개발자는 계속 진행하려면 동일한 출처에서 이러한 모듈을 인스턴스화해야 합니다. Chrome 95 이후 버전에서 사용할 수 있습니다

Wasm 모듈의 정의 및 작동 방식

WebAssembly 프로그램은 빌드, 로드, 컴파일이 있습니다

다음 코드 예에서는 https://iframe.site.example 앱을 다음을 통해 https://main.site.example님과 공유함 postMessage()입니다. 이러한 도메인은 동일 사이트이지만 교차 출처입니다.

https://iframe.site.example의 Wasm 모듈:

(async () => {
  const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
  iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();

Chrome 95부터 발신자와 수신자의 출처가 동일해야 합니다. 포함 위의 경우 https://iframe.site.example는 다음과 같아야 합니다. https://main.site.example 또는 그 반대로 합니다.

필요한 이유

Chrome은 브라우저, 브라우저, 브라우저 등 Chrome OS에서 다양한 문서, 탭, 프레임을 사이트 관련 에이전트 클러스터 즉, 동일 사이트 문서는 정확한 방법은 브라우저마다 다릅니다. 최근 Chrome 보다 세분화된 단위인 오리진으로 처리하기 시작했습니다. 우리는 그것을 원본 키 연결 에이전트 클러스터. 하지만 그렇게 하는 데는 리소스가 많이 들기 때문에 출처 기반 에이전트 클러스터는 제한된 웹사이트에만 발견적 방식으로 적용되었습니다.

기본적으로 모든 에이전트 클러스터에 출처 기반이 되도록 할 계획입니다. 목표: 이를 위해서는 사이트 관련 데이터가 필요한 기능을 제한해야 합니다. 원본 클러스터:

  • (Chrome만 해당) 더 이상 SharedArrayBuffer 드림 또는 WebAssembly.Memory 다른 동일 사이트 교차 출처 페이지에 전달합니다. 이는 Chrome 92부터 이미 적용되었습니다.
  • 더 이상 보낼 수 없습니다. WebAssembly.Module 드림 객체를 postMessage()를 통해 다른 동일 사이트 교차 출처 페이지에 전달합니다. 이 변경사항 아래에 보다 자세히 설명되어 있습니다.
  • 더 이상 document.domain 이는 일반적으로 동일 사이트 교차 출처 페이지에서 서로의 DOM에 동기식으로 액세스하지만 출처 관련 에이전트 클러스터에서는 이(가) 사용 중지되었습니다.

위의 모든 변경사항을 해결함으로써 Chrome은 출처 관련 에이전트를 사용하도록 전환할 예정입니다. kube-APIserver로 전송합니다

출처 관련 에이전트 클러스터에 대한 자세한 내용은 Origin-Agent-Cluster 헤더로 성능 격리 요청을 참조하세요.

다음 단계 및 리소스

기본적으로 Chrome이 출처 관련 에이전트 클러스터와 호환되도록 하기 위해 document.domain를 읽기 전용으로 설정합니다. Chrome팀은 이 변경사항을 적용하는 것을 목표로 하고 있습니다. 2022년 중반에서 말이죠.

사진: 마커스 윙클러스플래시 해제