728x90

이번 포스팅에서는 X-로 시작하는 헤더에 대해 알아보자. 

 

X-로 시작하는 헤더들은 어떤 의미를 가지고 있을까? 

예전에는 사용자가 임의로 헤더를 정의할 때, 사용자가 정의한 헤더라는 것을 알려주고자

앞에 X-를 붙이곤 했다. 하지만 2012년에 임의라는 의미는 이미 사라졌다

 

이제는 사용자 정의 헤더도 X-를 앞에 붙이지 않아도 된다. (하지만 많은 사람들, 심지어 구글마저 습관적으로 X를 앞에 붙인다고 한다) 

 

지금은 아니라도 예전에 규칙이었기 때문에 X-를 붙인 헤더들을 많이 볼 수가 있다. 

그 중 몇 헤더들은 너무 널리 쓰여서, 사실상 표준 헤더가 되어 버렸다. 

 

X- 규칙은 사라졌지만, X-가 앞에 붙은 헤더들 중 유명한 것들은 알아두는 게 좋다. 

 

X-Forwarded-For, X-Forwarded-Host, X-Forwarded-Proto

요청이 어디서부터 건너왔는지 알려주는 헤더이다. 

실제 세상에서는 클라이언트(요청)-서버(응답)와 같은 2단 구조보다는,

클라이언트(요청)-중개 서버-중개 서버- ... -최종 서버(응답) 과 같은 다단 구조가 더 많다. 

 

이 때, 중개 서버를 거치면서 헤더들이 변조되고, 요청을 누가 보냈는지 애매해지기도 한다. 

X-Forwarded 헤더 시리즈는 원래 요청이 누구였는지를 밝혀준다

(물론 이것도 조작할 수 있으니 완전히 믿어서는 안 된다.)

 

X-Forwarded-For: 1.2.3.4, 5.6.7.8, 9.10.11.12
X-Forwarded-Host: www.abc.com
X-Forwarded-Proto: https

 

For현재까지 거쳐온 서버의 IP에 대한 정보를 가지고 있다. 

1.2.3.4가 원래 서버 IP라면 나머지는 중개 서버 IP가 된다. 

Host원래 서버의 호스트 명이고, Proto원래 서버의 프로토콜이 된다. 

 

 

사실, Forwarded 헤더가 표준 헤더이다. 위 세 가지를 모두 처리할 수 있다. 

 

Forwarded: for=1.2.3.4; host=www.abc.com; proto=https; by=5.6.7.8, 9.10.11.12

 

X-Frame-Options

frame, iframe, object 태그 안에서 페이지를 렌더링하는 것을 막을 수 있다

내 사이트가 frame, iframe, object를 안 쓴 다면 아래처럼 막아두는 게 보안에 좋다. 

클릭재킹(내가 무언가를 눌렀는데, 실제로는 그게 아니라 다른 게 눌리는 해킹 방법)을 막을 수 있다고 한다. 

 

X-Frame-Options: DENY

 

 

 

만약, 내 사이트 자체를 iframe 등으로 불러오는 경우에는 아래처럼 자신의 페이지를 불러오는 것은 허용할 수 있다. 

 

X-Frame-Options: SAMEORIGIN

 

 

 

특정한 사이트를 불러오는 것만 허용하고 싶다면 아래와 같이 명시해주면 된다. 

 

X-Frame-Options: ALLOW-FROM https://www.zerocho.com

 

X-Content-Type-Options

서버에서 보내온 Content-Type 헤더가 잘못 설정되었다고 생각하는 경우, 

브라우저는 자체적으로 컨텐츠 타입을 추론한다. 

 

예를 들어, 분명히 css 파일인데 Content-Type 헤더가 text/html인 경우, 

브라우저가 text/css로 추론할 수도 있다는 뜻이다. 

 

하지만 이런 임의적 행동은 예상치 못한 행동이기 때문에 위험할 수 있다. 

 

그럴 때는 아래와 같은 헤더를 서버에 보내주어, 브라우저가 서버가 보낸 컨텐츠 타입을 따르게 강제할 수도 있다. 

 

X-Content-Type-Options: nosniff

 

 

 

 

 

 

이 포스팅은 아래 링크를 참고하여 작성하였습니다.

https://www.zerocho.com/category/HTTP/post/5b611b9e33b4636aa8bb1fc4

728x90

+ Recent posts