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.com
iframe 페이지를 포함한다고 가정해 보겠습니다. 이러한 페이지에는 서로 다른 하위 도메인이 있는 동일한 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 문제 패널에 경고를 표시합니다. 다음 스크린샷은 이 경고의 예를 보여줍니다.
보고 엔드포인트가 설정된 경우 사용 중단 보고서도 전송됩니다. 기존 보고서 수집 서비스에서 보고 API를 사용 하거나 고유한 보고 솔루션을 빌드하는 방법에 대해 자세히 알아봅니다.
팁
LightHouse 사용되지 않는 API 감사를 통해 사이트를 실행하여 Microsoft Edge에서 제거되도록 예약된 모든 API를 찾을 수 있습니다.
대체 원본 간 통신
현재 웹 사이트에 대해 대체할 document.domain
두 가지 옵션이 있습니다. 대부분의 사용 사례에서 원본 간 postMessage() 또는 채널 메시징 API 는 를 대체할 document.domain
수 있습니다.
다음 목록에서는 원본 간 DOM 조작 대신 document.domain
개발자가 사용해야 postMessage()
하는 단계를 보여 줍니다.
https://parent.example.com
는 을 통해postMessage()
자체 DOM을 수정하도록 요청하는 메시지를 포함하는https://video.example.com
iframe으로 보냅니다.https://video.example.com
는 DOM을 조작하고 를 사용하여postMessage
부모에게 성공 사실을 알립니다.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 Attribution 4.0 국제 라이선스에서 사용이 허가되었습니다.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기