본문 바로가기

보안 이론/웹 보안

HTTP 헤더와 오류코드

반응형

HTTP 패킷을 분석하는데 도움이 될 헤더들의 설명과 HTTP 오류코드의 의미에 대하여 학습해보았다.


HTTP 

hyper text transfer protocol은 웹 사이트를 이용할 때 사용되는 네트워크 프로토콜로 서버와 클라이언트가 통신하기 위한 약속(규약)이다.

HTTP는 요청 메세지와 응답 메세지가 다르며 사용하는 헤더도 차이가 있는데 직접 패킷을 보면서 하나씩 살펴보자.

 

다음은 버프스위트를 이용해 비박스로 접속하는 HTTP 패킷을 가져온 것이다.

 

HTTP Request 메시지

다음은 HTTP 요청 메시지이다. 첫 줄에는 메소드와 URL, HTTP 버전을 나타낸다.

그다음부터 헤더를 나타내고 한 줄 공백 다음에 바디를 나타내나 전송할 데이터가 없으면 바디를 비워서 전송한다.

 

이제 요청 메시지에서 자주 볼 수 있는 요청 헤더에 대해서 설명할 것이다.

 

Host : 요청하는 서버의 도메인과 포트를 나타내며 포트가 생략된 경우 일반적으로 80 포트를 의미한다.

User-Agent : 클라이언트의 정보를 나타낸다. 대표적으로 웹브라우저의 정보를 나타내고 서버는 이를 이용해 응답을 달리할 수 있다.

Referer : 클라이언트가 어디에서 부터 접속하는지 이전 웹페이지 주소를 알려준다. 이를 통해 CSRF 공격을 검사하기도 한다.

Accept : 클라이언트가 어떤 컨텐츠 타입을 처리할 수 있는지 알려준다. 서버는 이를 참고하여 응답한다.

Accept-Encoding : 클라이언트가 어떤 인코딩, 압축 방식을 처리할 수 있는지 알려준다.

Accept-Language : 클라이언트가 어떤 언어를 처리할 수 있는지 알려준다.

Cookie : 쿠키를 전달하는 헤더로 키와 값으로 된 데이터를 서버로 전달한다.

Content-Type, Content-Length : 바디가 존재하는 경우 바디의 종류와 길이를 알려준다. 요청과 응답 두 가지 모두에서 사용될 수 있다.

 

HTTP Response 메시지

다음은 HTTP 응답 메시지이다. 첫 줄에는 HTTP 버전, 응답코드, 응답 코드 메시지을 나타낸다. 응답 코드는 아래에서 다룬다.

 

응답 메시지의 주요 헤더들을 알아보자

 

Server : 웹 서버와 프레임워크 등 버전 정보를 알려준다. 보안적으로 약점이 될 수 있으므로 이를 숨기는 조치를 할 수 있다.

X-Powered-By, X-ASPNET-VERSION : Server 헤더와 마찬가지로 버전 정보를 나타낸다. 

Set-Cookie : 서버가 클라이언트로 쿠키를 전달할 때 사용된다. 옵션으로 유효기간과 경로 등을 설정 하나 생략될 수 있다.

  • Secure : 옵션으로 사용 시 HTTP 요청 시 전달되지 않고 HTTPS를 사용할 때만 암호화되어 전송된다. 세션ID 노출 위험을 차단한다.
  • HttpOnly : 옵션으로 사용 시 자바스크립트로 쿠키값을 접근하는 것을 막아 XSS 취약점에 대한 피해를 방지할 수 있다.
  • Expires : 쿠키의 유효기간을 설정하며 지정되지 않으면 세션 종료 시까지만 유효시간을 가진다.

X-Frame-Options : <frame>이나 <iframe> 등을 제어하는 헤더로 이를 이용하여 악성링크를 숨기는 클릭재킹 공격을 방지한다.

  • DENY : 값을 사용 시 프레임 내에 웹페이지를 절대 표시하지 않는다.
  • SAMEORIGIN : 값을 사용 시 같은 도메인 안에서 요청된 페이지만 프레임으로 표시되게 한다.

X-XSS-Protection : 리플렉티드 XSS 공격이 탐지되었을 때 웹 페이지 로딩을 막아준다. X-XSS-Protection: 1; block

X-Content-Type-Options : 파일을 읽을 때 Content-Type의 값과 파일이 다를 때 추측하여 실행하는 MIME 기능을 차단하기 위한 헤더이다. nosniff 값을 이용하여 MIME 스니핑를 방지한다.

 

이밖에도 다양한 헤더들이 존재하며 관리자가 임의의 헤더를 생성하여 사용할 수도 있다.

 

HTTP 응답 코드

응답 코드 종류 자주 쓰는 응답 코드와 메세지 설명
  1xx (정보)  101  Switching Protocol 프로토콜 전환이 요청되어 서버가 승인하는 중이다.
  2xx (성공)  200  OK 서버가 요청을 제대로 처리했다는 뜻이다.
 201  Created 성공적으로 요청되어 서버가 리소스 생성을 완료했다.
  3xx (리다이렉션)  301  Moved Permanently Location 헤더에 정의된 URL로 리소스가 이동되어 리다이렉트되었다.
 302  Found 현재 서버가 다른 위치의 페이지로 요청에 응답하지만 향후 요청 시에는 원래 위치를 사용해야 한다.
 304  Not Modified 마지막 요청 이후 페이지가 수정되지 않았다. 리소스 변경 내용 없음
  4xx (클라이언트 오류)  401  Unauthorized 인증이 실패했거나 인증이 필요하다.
 403  Forbidden 권한이 없어 리소스 요청을 거부한다.
 404  Not Found 해당 리소스가 존재하지 않는다.
  5xx (서버 오류)  500  Internal Server Error 서버에 오류가 발생하여 요청을 처리할 수 없다
 503  Service Unavailable 서버가 오버로드되거나 다운되어 현재 사용할 수 없다. 대체로 일시적인 상태이다.

https://developer.mozilla.org/ko/docs/Web/HTTP/Status

 

HTTP 상태 코드 - HTTP | MDN

HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려줍니다. 응답은 5개의 그룹으로 나누어집니다: 정보를 제공하는 응답, 성공적인 응답, 리다이렉트, 클라이언트 에러, 그리고

developer.mozilla.org

 

반응형


Calendar
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Visits
Today
Yesterday