요청의 참조 정책을 나타낸다.
referrerPolicy
는 요청시 HTTP Referrer-Policy
헤더에 설정 가능하며 응답하는 쪽에서 Request
객체의 referrerPolicy
로 조회가 가능하다. 응답하는 쪽에서 referrerPolicy
정책에 따라서 referrer
데이터를 제한될 수 있다.
request.referrerPolicy;
분류 | 값 | 설명 |
---|---|---|
writable | no |
HTTP 요청시 옵션으로 Referrer
헤더를 가질 수 있다. 이 헤더는 요청이 만들어진 출처(origin) 또는 웹 페이지의 주소(URL)을 가진다. Referrer-Policy
헤더는 이 Referrer
헤더가 가질 수 있는 값을 조정한다. 요청이 있었던 위치를 알고 있는 Referrer
헤더는 요청을 만드는 목적에 따라 유용한 값으로 사용될 수도 있다.
그러나 요청과 응답시 목적과 환경에 따라서 Referrer
헤더는 보안상의 취약점을 가질수도 있다. 특히 요청시 쿼리에 중요한 데이터가 포함되어 있다면 고스란히 노출될 수 밖에 없다. 따라서 Referrer
헤더가 정말로 필요한지를, 필요하다면 어느 정도까지의 값을 Referrer
헤더가 가질지를 검토하는 것은 대단히 중요하다.
Referrer-Policy: no-referrer
referrer
헤더는 생략된다. Request
에 referrer
의 정보가 포함되지 않는다.Referrer-Policy: no-referrer-when-downgrade
referrer
에서 출처, 경로 및 쿼리 문자열을 보낸다.Referrer-Policy: origin
Referrer-Policy: origin-when-cross-origin
Referrer-Policy: same-origin
Referrer-Policy: strict-origin
Referrer-Policy: strict-origin-when-cross-origin
Referrer-Policy: unsafe-url
Referrer-Policy: origin
<meta name="referrer" content="no-referrer" />
<img referrerpolicy="origin-when-cross-origin" src="/images/photo.jpg" />
let headers = new Headers();
headers.append("Referrer-Policy", "origin");
let init = { method : "POST", headers: headers };
fetch("/save.php", init);
웹 페이지, 서로 다른 요청마다 다른 정책을 적용할 수 있으며 HTTP header와 <meta>
요소는 모두 페이지 레벨에서 동작한다. 우선 순위는 아래와 같다
Referrer-Policy 헤더를 설정하지 않으면 웹 브라우저의 기본 값으로 요청을 보내게 된다. 하지만 모든 웹 브라우저가 동일한 기본 값을 가지지 않을 수 있다. 심지어는 시크릿 모드와 같이 프라이버시를 보호하는 기능이 있는 웹 브라우저의 동작시 그렇지 않을 때와 다른 기본 값을 가질수도 있다.
이러한 이유로 명시적으로 보안이 강화된 'strict-origin-when-cross-origin
'을 사용하는 것이 좋다. 그러나 일괄된 값보다는 개발시에 어떠한 값을 가질지를 검토하고 그에 따른 값을 명시하는게 맞을 것이다.