티스토리 뷰
Same-origin과 Same-site
same-site와 same-origin은 다르다.
scheme과 host name, port의 조합이 모두 같을 경우 same-origin이고, host name이 같을 경우 same-site라고 한다.
origin
https://sample.com:8080 라는 사이트가 있다는 것을 기준으로 origin을 비교해 볼 경우
origin | compare | 내용 |
https://sample1.com:8080 | cross-origin | domain이 다름 |
http://sample.com:8080 | cross-origin | scheme이 다름 |
https://sample.com:8081 | cross-origin | port가 다름 |
https://blog.sample.com:8080 | cross-origin | sub domain이 다름 |
https://sample.com:8080 | same-origin | 같은 origin |
cors를 포스팅할 때, origin에 대한 내용을 정리해두었다.
[웹 보안]CORS(Cross Origin Resource Sharing, 교차 출처 자원 공유)
최근 빗썸 Open API를 이용하여 가상화폐에 대한 데이터를 가져오려고 하고 있다. "https://api.bithumb.com/public/ticker/all_KRW" url을 get으로 요청을 보냈는데 아래와 같은 오류를 만났다. CORS정책에 의..
kmj24.tistory.com
site
https://sample.com:8080 라는 사이트가 있다는 것을 기준으로 site를 비교해 볼 경우
origin | compare | 내용 |
https://sample1.com:8080 | cross-site | domain이 다름 |
http://sample.com:8080 | same-site | scheme이 달라도, domain이 같다. |
https://sample.com:8081 | same-site | port가 달라도, domain이 같다. |
https://blog.sample.com:8080 | same-site | sub domain이 달라도, domain이 같다. |
https://sample.com:8080 | same-site | 완전히 같다. |
same-site는 scheme을 무시하지만 http취약점을 방어하기 위해 조금 더 엄격한 schemeful same-site로 구별하는 방법이 있다.
만약 https://sample.com:8080과 http://sample.com:8080이 있을 때 scheme이 다르므로 cross-site 취급을 한다.
Referer와 Referrer-Policy
Referer은 웹 브라우저로 www를 서핑할 때, 하이퍼링크를 통하여 각각의 사이트로 방문 시 남는 흔적을 의미한다.
만약 웹 사이트 A에서 B 라는 사이트로 이동하는 하이퍼링크가 존재하고, 이때 A 사이트 이용자가 이 하이퍼링크를 클릭하게 될 경우 웹 브라우저에서 B 사이트로 Referer를 전송하게 된다. B사이트의 관리자는 전송된 Referer를 보고 A사이트를 통해 자신의 사이트에 방문한 사실을 알 수 있다.
※ (Referer은 사실 오타였다고 한다.)

HTTP request는 Optional 헤더인 Referer를 가지고 있을 수 있다.
Referer 헤더에 해당 정보를 요청한 사이트의 전체 주소가 담겨져 있다.

Referer헤더에는 다양한 형태의 요청에 대한 내용이 있을 수 있다.
만약 링크를 타고 들어왔다면 해당 링크를 포함하는 site의 주소가 들어있다.
다른 도메인에 리소스 요청을 보내는 경우라면 해당 리소스를 사용하는 페이지의 주소가 이 헤더에 포함된다.
Referrer-Policy
Referer에 query 또는 path등의 사용자 식별 정보를 포함한 전체 주소를 Referer를 통하여 다른 origin에 보내는 것은, 보안상의 문제가 될 수 있다.
이러한 보안상의 이유로 referer 데이터를 제한하기 위해 사용하는 것이 Referrer-Policy이다.
referrer-policy 정책의 종류는 총 8가지다.
데이터가 없을 경우, origin만 존재하는 경우, URL 전체가 존재하는 경우에 따라 나눈다.
내용 | |||
no-referrer | Referer 헤더를 생략하여 전송한다. | ||
origin | Referer 헤더에 origin을 포함하여 전송한다. | ||
unsafe-url | Referer 헤더에 보안에 관계없이 모든 정보를 포함하여 전송한다. | ||
strict-origin | 프로토콜 보안 수준이 동일한 경우에만 원본을 전송한다. 덜 안전한 대상 (HTTPS → HTTP) 으로 Referer헤더를 보내지 않도록 한다. |
||
no-referrer-when-downgrade | 프로토콜 보안 수준이 동일하거나 높을 경우 원본 경로 및 쿼리 문자열을 포함하여 전송. 덜 안전한 대상으로는 Referer 헤더를 보내지 않도록 한다. |
||
origin-when-cross-origin | 동일한 프로토콜 보안 수준에 대하여 same-origin요청을 수행할 경우 origin path 및 쿼리 문자열을 보낸다. 덜 안전한 대상에 대한 요청에 대한 origin만 보낸다. |
||
same-origin | same-origin에 대하여 origin, path, query 문자열을 전송한다. cross-origin으로는 Referer헤더를 보내지 않도록 한다. |
||
strict-origin-when-cross-origin (default) |
same-origin-request를 수행할 때 origin, path, query문자열을 전송한다. cross-origin일 경우 프로토콜 보안 수준이 동일할 경우에만 origin을 보낸다. 덜 안전한 대상으로 Referer헤더를 보내지 않도록 한다. |
참고
https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Referer
Referer - HTTP | MDN
Referer 요청 헤더는 현재 요청을 보낸 페이지의 절대 혹은 부분 주소를 포함합니다. 만약 링크를 타고 들어왔다면 해당 링크를 포함하고 있는 페이지의 주소가, 다른 도메인에 리소스 요청을 보
developer.mozilla.org
https://ko.wikipedia.org/wiki/HTTP_%EB%A6%AC%ED%8D%BC%EB%9F%AC
HTTP 리퍼러 - 위키백과, 우리 모두의 백과사전
ko.wikipedia.org
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy
Referrer-Policy - HTTP | MDN
The Referrer-Policy HTTP header controls how much referrer information (sent with the Referer header) should be included with requests. Aside from the HTTP header, you can set this policy in HTML.
developer.mozilla.org
https://yceffort.kr/2020/09/referer-and-referrer-policy#referer%EC%99%80-referrer-policy-101
Home
yceffort
yceffort.kr