다음을 통해 공유


Microsoft Edge는 수정을 사용하지 않도록 설정합니다. document.domain

Warning

웹 사이트가 를 통해 document.domain동일한 원본 정책을 완화하는 데 의존하는 경우 작업이 필요합니다. 이것이 변경되는 이유에 대해 계속 읽거나 대체 원본 간 통신 으로 이동하여 원본 간 통신을 달성하기 위한 대체 메커니즘에 대해 알아봅니다.

소개

Document 인터페이스의 "domain" 속성은 동일한 원본 정책에서 사용하는 대로 현재 문서의 원본에서 도메인 부분을 가져오거나 설정합니다.

Microsoft Edge는 이 변경 내용이 Chromium 상속되었습니다. JavaScript를 사용하여 속성을 수정 document.domain 하려는 시도는 이제 무시됩니다. 원본 간 통신을 위해 또는 채널 메시징 API와 같은 postMessage() 대체 방법을 사용해야 합니다. 이 변경 내용은 Edge 119 이상에 있습니다.

또는 웹 사이트가 제대로 작동하기 위해 를 통해 document.domain 동일한 원본 정책 완화에 의존하는 경우 사이트에서 헤더를 Origin-Agent-Cluster: ?0 보낼 수 있습니다. 이 헤더는 완화가 필요한 다른 모든 문서에서 보내야 합니다.

참고

document.domain 단 하나의 문서만 설정해도 아무런 효과가 없습니다.

변경할 수 없는 이유는 document.domain 무엇인가요?

일부 웹 사이트는 "동일하지만 원본 간" 페이지 간의 통신을 허용하도록 설정 document.domain 됩니다. 설정을 document.domain 사용하면 동일한 사이트 문서를 보다 쉽게 통신할 수 있습니다. 이 변경으로 인해 동일한 원본 정책이 완화되므로 부모 페이지는 동일한 사이트 iframe의 문서에 액세스하고 DOM 트리를 트래버스할 수 있으며 그 반대의 경우도 마찬가지입니다.

중요

동일한 사이트이지만 원본 간 사이트에는 동일한 eTLD+1 이 있지만 하위 도메인은 다릅니다.

의 페이지 https://parent.example.com 가 의 https://video.example.comiframe 페이지를 포함한다고 가정해 보겠습니다. 이러한 페이지에는 서로 다른 하위 도메인이 있는 동일한 eTLD+1(example.com)이 있습니다. 두 페이지의 document.domain 가 로 설정 'example.com'되면 브라우저는 두 페이지를 동일한 원본인 것처럼 처리합니다.

이 기술은 편리합니다. 하지만 보안 위험이 발생합니다.

보안 문제 document.domain

관련 document.domain 보안 문제로 인해 사양이 변경되어 개발자에게 이 문제에 대해 경고하고 가능한 경우 사용하지 않도록 지시합니다. 다른 브라우저 공급업체와의 현재 논의는 같은 방향으로 진행되고 있습니다.

다음 예제에서는 공격자가 을 남용 document.domain하는 방법을 보여 줍니다.

각 고객에게 고유한 하위 도메인을 제공하는 공유 호스팅 서비스를 고려합니다. 개발자가 해당 페이지에서 설정하는 document.domain 경우 다른 하위 도메인에서 제공된 공격자의 페이지는 동일한 값을 설정하고 피해자 페이지의 콘텐츠를 수정할 수 있습니다.

마찬가지로 각 고객에 대해 다른 포트를 사용하여 페이지를 제공하는 공유 호스팅 서비스를 고려합니다. 개발자가 해당 페이지에서 설정하는 document.domain 경우 다른 포트에서 제공된 공격자의 페이지는 동일한 값을 설정하고 피해자 페이지의 콘텐츠를 수정할 수 있습니다. 이 공격은 원본의 포트 번호 구성 요소를 무시하기 때문에 document.domain 가능합니다.

참고

설정 document.domain의 보안 영향에 대해 자세히 알아보려면 MDN의 Document.domain 문서를 참조하세요.

내 사이트가 영향을 받는지 어떻게 알 수 있나요?

웹 사이트가 이 변경의 영향을 받는 경우 Microsoft Edge는 DevTools 문제 패널에 경고를 표시합니다. 다음 스크린샷은 이 경고의 예를 보여줍니다.

document.domain이 수정되면 경고입니다.

보고 엔드포인트가 설정된 경우 사용 중단 보고서도 전송됩니다. 기존 보고서 수집 서비스에서 보고 API를 사용 하거나 고유한 보고 솔루션을 빌드하는 방법에 대해 자세히 알아봅니다.

LightHouse 사용되지 않는 API 감사를 통해 사이트를 실행하여 Microsoft Edge에서 제거되도록 예약된 모든 API를 찾을 수 있습니다.

대체 원본 간 통신

현재 웹 사이트에 대해 대체할 document.domain 두 가지 옵션이 있습니다. 대부분의 사용 사례에서 원본 간 postMessage() 또는 채널 메시징 API 는 를 대체할 document.domain수 있습니다.

다음 목록에서는 원본 간 DOM 조작 대신 document.domain 개발자가 사용해야 postMessage() 하는 단계를 보여 줍니다.

  1. https://parent.example.com 는 을 통해 postMessage() 자체 DOM을 수정하도록 요청하는 메시지를 포함하는 https://video.example.com iframe으로 보냅니다.
  2. https://video.example.com 는 DOM을 조작하고 를 사용하여 postMessage 부모에게 성공 사실을 알립니다.
  3. https://parent.example.com 는 성공을 인정합니다.

의 1단계:https://parent.example.com


// Configure a handler to receive messages from the subframe.
iframe.addEventListener('message', (event) => { 

// Reject all messages except from https://video.example.com 
  if (event.origin !== 'https://video.example.com') return;
  
  // Filter success messages 
    if (event.data === 'succeeded') { 

    // DOM manipulation is succeeded 

  } 

}); 

// Send a message to the subframe at https://video.example.com

iframe.postMessage('Request DOM manipulation', 'https://video.example.com'); 

의 2단계:https://video.example.com


// Configure a handler to receive messages from the parent frame.
window.addEventListener('message', (event) => {
 
  // Reject all messages except ones from https://parent.example.com 
  
  if (event.origin !== 'https://parent.example.com') return;
  
  // Perform requested DOM manipulation on https://video.example.com.
  
  if (event.data === "showTheButton") {
     document.getElementById('btnContinue').style.visibility = 'visible';
     // Send a success message back to the parent.

     event.source.postMessage('succeeded', event.origin); 
  }
}); 

헤더를 최후의 Origin-Agent-Cluster: ?0 수단으로 보내기

를 계속 설정 document.domain해야 하는 강력한 이유가 있는 경우 대상 문서에 응답 헤더를 보낼 Origin-Agent-Cluster: ?0 수 있습니다.

Origin-Agent-Cluster: ?0 

헤더는 Origin-Agent-Cluster 원본 키 에이전트 클러스터에서 문서를 처리해야 하는지 여부를 브라우저에 지시합니다. 에 대해 Origin-Agent-Cluster자세히 알아보려면 Origin-Agent-Cluster 헤더를 사용하여 성능 격리 요청을 참조하세요.

이 헤더를 보내면 기본적으로 변경할 수 없게 된 후에도 문서를 계속 설정할 document.domain 수 있습니다.

브라우저 호환성

다음 조직에서는 브라우저 호환성을 위해 더 이상 사용되지 document.domain 않습니다.

  • 원본 사양은 기능을 제거해야 한다고 명시합니다.
  • Mozilla 표준 위치는 기본적으로 프로토타입을 작성할 가치가 있는 비활성화를 고려 document.domain 합니다.
  • WebKit 은 setter 사용 중단 document.domain 에 대해 적당히 긍정적임을 나타냅니다.

다른 리소스

콘텐츠 라이선스

참고

이 페이지의 일부는 Chromium.org에서 생성 및 공유하고 Creative Commons Attribution 4.0 국제 라이선스에 규정된 조건에 따라 사용되는 작업을 기반으로 합니다. 원래 페이지는 여기에서 찾을 수 있습니다.

Creative Commons 라이선스
이 작업은 Creative Commons Attribution 4.0 국제 라이선스에서 사용이 허가되었습니다.