WEBAPI

settings_applicationsRequest  >   settings_applications[[Prototype]]

WEBAPI

Editing
  • account_tree
  • bug_report

DOMStringreferrerPolicy

요청의 참조 정책을 나타낸다.

설명

referrerPolicy는 요청시 HTTP Referrer-Policy 헤더에 설정 가능하며 응답하는 쪽에서 Request 객체의 referrerPolicy로 조회가 가능하다. 응답하는 쪽에서 referrerPolicy 정책에 따라서 referrer 데이터를 제한될 수 있다.

구문

request.referrerPolicy;

속성 명세

명세
분류설명
writableno

기술 문서

Referrer 헤더

HTTP 요청시 옵션으로 Referrer 헤더를 가질 수 있다. 이 헤더는 요청이 만들어진 출처(origin) 또는 웹 페이지의 주소(URL)을 가진다. Referrer-Policy 헤더는 이 Referrer 헤더가 가질 수 있는 값을 조정한다. 요청이 있었던 위치를 알고 있는 Referrer 헤더는 요청을 만드는 목적에 따라 유용한 값으로 사용될 수도 있다.

그러나 요청과 응답시 목적과 환경에 따라서 Referrer 헤더는 보안상의 취약점을 가질수도 있다. 특히 요청시 쿼리에 중요한 데이터가 포함되어 있다면 고스란히 노출될 수 밖에 없다. 따라서 Referrer 헤더가 정말로 필요한지를, 필요하다면 어느 정도까지의 값을 Referrer 헤더가 가질지를 검토하는 것은 대단히 중요하다.

설정 가능한 정책

  • Referrer-Policy: no-referrer
    • referrer 헤더는 생략된다. Requestreferrer의 정보가 포함되지 않는다.
  • Referrer-Policy: no-referrer-when-downgrade
    • 프로토콜 보안 수준이 동일(HTTP → HTTP, HTTPS → HTTPS)하거나 향상(HTTP → HTTPS)되면 referrer에서 출처, 경로 및 쿼리 문자열을 보낸다.
  • Referrer-Policy: origin
    • 출처(프로토콜, 호스트, 도메인)만 보낸다.
  • Referrer-Policy: origin-when-cross-origin
    • 동일한 프로토콜  보안 수준(HTTP → HTTP, HTTPS → HTTPS)에 대해 동일한 출처 요청을 수행할 때 출처, 경로 및 쿼리 문자열을 전송한다. 교차출처 요청 및 덜 안전한 대상(HTTPS → HTTP)으로 요청시에는 출처만 보낸다.
  • Referrer-Policy: same-origin
    • 동일출처 요청에 대해 출처, 경로 및 쿼리 문자열을 보낸다.
  • Referrer-Policy: strict-origin
    • 프로토콜 보안 수준이 동일한 때만 출처를 보낸다.
  • Referrer-Policy: strict-origin-when-cross-origin
    • 동일 출처 요청을 수행할 때만 출처, 경로 및 쿼리 문자열을 보낸다. 교차출처 요청의 경우 프로토콜 보안 수준이 동일할 때 출처를 보낸다. 기본 값이다.
  • Referrer-Policy: unsafe-url
    • 프로토콜 보안 수준에 관계없이 모든 요청을 수행할 때 출처, 경로 및 쿼리 문자열을 보낸다.

설정하는 방법

HTTP header
Referrer-Policy: origin
HTML
<meta name="referrer" content="no-referrer" />
<img referrerpolicy="origin-when-cross-origin" src="/images/photo.jpg" />
JavaScript
let headers = new Headers();
headers.append("Referrer-Policy", "origin");
let init = { method : "POST", headers: headers };
fetch("/save.php", init);

웹 페이지, 서로 다른 요청마다 다른 정책을 적용할 수 있으며 HTTP header와 <meta> 요소는 모두 페이지 레벨에서 동작한다. 우선 순위는 아래와 같다

  1. Element 레벨
  2. Page 레벨
  3. Web Browser 기본 값

웹 브라우저 기본 값

Referrer-Policy 헤더를 설정하지 않으면 웹 브라우저의 기본 값으로 요청을 보내게 된다. 하지만 모든 웹 브라우저가 동일한 기본 값을 가지지 않을 수 있다. 심지어는 시크릿 모드와 같이 프라이버시를 보호하는 기능이 있는 웹 브라우저의 동작시 그렇지 않을 때와 다른 기본 값을 가질수도 있다.

이러한 이유로 명시적으로 보안이 강화된 'strict-origin-when-cross-origin'을 사용하는 것이 좋다. 그러나 일괄된 값보다는 개발시에 어떠한 값을 가질지를 검토하고 그에 따른 값을 명시하는게 맞을 것이다.

 

지원 웹브라우저