비디오 및 자막 · 다이렉트 미디어 다운로더
웹 브라우저의 동일 출처 정책 및 CORS에 대한 간략한 기록
· 배경
코르 웹 기록 보안
브라우저 도구가 다른 사이트의 파일을 자유롭게 읽는 것을 막는 규칙은 최초의 스크립팅 브라우저로 거슬러 올라갑니다. 이 게시물은 결국 제어된 크로스 사이트 가져오기를 가능하게 만든 동일 출처 정책, XMLHttpRequest 및 CORS 표준을 추적합니다.
브라우저가 방금 받은 바이트를 자신의 탭에 전달하는 것을 거부하는 이유 — 수십 년 된 규칙의 일상적인 효과
브라우저는 원격 파일을 표시하지만 해당 응답 본문을 페이지 JavaScript에 제공하는 것을 거부할 수 있습니다. 명백한 모순은 탐색과 프로그래밍 방식의 원본 간 읽기 간의 보안 분리입니다.
Direct Media Downloader는 청크를 Blob으로 읽어야 하기 때문에 규칙을 발견합니다. 다른 브라우저 경로를 따르기 때문에 Fetch가 실패하는 경우 기본 저장 링크가 작동할 수 있습니다. 거부하면 이 특정 다운로더가 의도적으로 자체 호출에서 자격 증명을 생략하더라도 브라우저의 다른 곳에서 쿠키와 인트라넷 리소스가 보호됩니다. 이 특정 요청에서 자격 증명이 누락되더라도 경계는 동일한 브라우저에서 관련 없는 쿠키와 인트라넷 페이지를 보호합니다.
Netscape, JavaScript 및 첫 번째 원본 규칙 — 동일 원본 정책을 촉발한 보안 문제
초기 웹 스크립팅에서는 한 사이트가 방문자의 주변 액세스를 통해 다른 사이트의 민감한 페이지를 읽지 못하도록 차단해야 했습니다. 브라우저는 원점을 중심으로 경계를 구성했습니다.
기록 세부 정보는 구현마다 다르므로 실제 상속이 가장 중요합니다. 구성표, 호스트 및 포트는 스크립트에서 읽을 수 있는 리소스에 대한 신뢰 구획을 정의합니다. 원본을 하나의 단위로 처리하는 것은 문서, 스크립트 및 네트워크 API 전반에 일관되게 적용할 수 있는 엔지니어링 경계였습니다. 오리진 그룹화는 브라우저 엔진이 문서, 스크립트, 저장소 및 네트워크 응답 전반에 걸쳐 적용할 수 있는 시행 가능한 단위를 제공했습니다. 모델은 불완전하지만 개발자에게 무제한의 주변 권한보다는 예측 가능한 기본값을 제공합니다.
XMLHttpRequest 및 벽으로 둘러싸인 웹 — 스크립트 요청이 규칙을 상속하는 방법과 매시업이 어려움을 겪는 이유
XMLHttpRequest는 백그라운드 HTTP 작업을 활성화했지만 원본 제한은 유지했습니다. 이는 동일한 사이트 애플리케이션을 유용하게 만들었고 교차 사이트 매시업에는 협력이나 서버 중개자가 필요했습니다.
범용 클라이언트 재정의로 인해 보호 기능이 파괴되었을 수 있습니다. 대상을 소유한 서버에는 선택된 응답을 읽을 수 있는 외부 원본을 표현하는 방법이 필요했습니다. 서버 릴레이는 일반적인 해결 방법이 되었지만 신뢰, 대역폭 및 요청 위조 위험을 브라우저 샌드박스 외부의 인프라로 옮겼습니다. 릴레이 해결 방법은 정책을 제거하는 대신 대역폭, 신뢰 및 서버 측 요청 위조 위험을 클라이언트 샌드박스 이상으로 이동했습니다. 이러한 중개자는 의도적으로 배포되는 경우 자체 보안, 개인 정보 보호 및 남용 제어가 필요합니다.
CORS 표준 — 액세스 제어 헤더를 통해 서버가 기본값을 완화하지 않고 교차 출처 읽기를 선택할 수 있게 하는 방법
CORS는 브라우저에서 해석되는 HTTP 응답 헤더를 통해 해당 협력을 제공합니다. `Access-Control-Allow-Origin`는 요청 원본을 승인하거나 자격 증명이 없는 적절한 경우 더 광범위한 대상을 승인할 수 있습니다.
메커니즘은 동일 출처 정책을 전역적으로 비활성화하지 않습니다. 호스트가 프로토콜에 응답을 노출하기로 선택한 응답에 범위 지정 읽기 액세스 권한을 부여합니다. 프리플라이트 결과는 프로토콜 규칙에 따라 브라우저에 의해 캐시될 수 있으므로 감사 시 하나의 웜 추적에서 "정책 확인이 발생하지 않음"을 추론해서는 안 됩니다. 이는 리소스 소유자가 선택한 호출자와 메서드에 대해 의도적인 예외를 게시할 수 있도록 허용하면서 기본 격리를 유지합니다.
실행 전, 간단한 요청 및 불투명한 응답 — 대부분의 다운로드 실패를 설명하는 어휘
일부 교차 출처 요청은 사전 실행이 필요하지 않을 정도로 간단합니다. 다른 사람들은 먼저 OPTIONS를 보내 메소드와 헤더가 허용되는지 묻습니다. 프리플라이트는 협상이지 실제 미디어 전송이 아닙니다.
불투명 응답은 무교 모드에서 발생하며 스크립트에서 상태, 헤더 및 본문을 숨깁니다. 읽을 수 없는 본문은 의도한 저장 가능한 Blob이 될 수 없기 때문에 ToolAcre는 해당 모드를 선택하지 않습니다. CORS 오류는 성공적인 서버 측 요청과 공존할 수 있으며, 이는 애플리케이션 실패가 원본이 아무 것도 수신하지 않았다는 것을 의미하지 않는 이유를 뒷받침합니다. 캐시된 실행 전 결정은 하나의 웜 트레이스에 나타나는 내용을 변경할 수 있으므로 역사적으로 OPTIONS가 없었다고 해서 협상이 존재하지 않았다는 증거는 아닙니다.
브라우저 전용 다운로더에 대한 CORS의 의미 — 호스트가 결정하고 도구는 재정의할 수 없으며 이에 대한 정직함이 올바른 응답입니다.
이 다운로더의 경우 호스트는 HEAD 및 GET 응답을 읽을 수 있는지 여부를 결정합니다. ToolAcre는 호스트를 대신하여 허용 원본 응답 헤더를 첨부할 수 없으며 자체 원본을 통해 본문을 중계하지 않습니다.
Fetch는 일부 오류에서 세부적인 정보를 의도적으로 보류하기 때문에 CORS와 네트워크 가능성을 결합한 오류입니다. DevTools는 애플리케이션 코드가 수신하는 것보다 더 많은 것을 방문자에게 공개할 수 있습니다. 호스트 운영자는 로컬 구성 의도에 의존하기보다는 의도한 원본, 메서드 및 헤더만 승인한 다음 정확한 프로덕션 응답을 확인해야 합니다. 차단된 읽기는 요청을 받은 서버와 공존할 수 있습니다. 이것이 바로 인터페이스가 애플리케이션 실패와 연결 없음을 동일시하지 않는 이유입니다.
요점: 귀찮을 때에도 사용자를 보호하는 규칙 — Direct Media Downloader가 주변이 아닌 내부에서 작동하는 방식
규칙은 합법적인 파일 전송을 방해하는 경우에도 사용자를 보호합니다. 브라우저 애플리케이션이 공개 미디어를 읽기를 원하는 호스트는 적절한 CORS 응답을 구성할 수 있습니다. 이 스크립트 경로를 통해 액세스할 수 없는 상태로 남아 있지 않습니다.
Direct Media Downloader는 해당 모델 내에서 작동합니다. 즉, 로컬에서 검증하고, 공개적으로 요청하고, 거부를 설명하고, 적합한 경우 기본 저장을 제안합니다. 브라우저 보안 경계를 우회 문제로 변환하지 않습니다. 이 기록을 이해하면 임의의 브라우저 적대감으로 인한 오류가 기본 거부 교차 사이트 읽기 모델의 가시적인 결과로 전환됩니다. 원본 소유자는 대시보드 구성에만 의존하는 대신 의도한 방법에 대해 정확한 생산 헤더를 테스트해야 합니다.