세션(Session)이란 일정 시간동안 같은 사용자(정확하게 브라우저를 말한다)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다. 방문자의 요청에 따른 정보를 방문자 메모리에 저장하는 것이 아닌 웹 서버가 세션 아이디 파일을 만들어 서비스가 돌아가고 있는 서버에 저장하는 것이다. 서버에 저장되기 때문에 사용자 정보가 노출되지 않는다.

 

1. 세션의 원리

- 세션 ID를 서버에서 클라이언트가 자시 웹사이트에 접속시 발급해준다.

- 서버에서 클라이언트로 발급해준 세션 ID를 쿠키를 사용해서 저장합니다.

- 클라이언트는 다시 접속시, 이 쿠리를 이용해서 세션 ID값을 전달합니다.

 

2. 세션의 장점

- 각 클라이언트에게 고유 ID를 부여합니다.

- 세션 ID로 클라이언트를 구분해서 클라이언트의 요구에 맞는 서비스를 제공할 수 있습니다.

- 사용해봤던 정보들을 서버에 저장하기 때문에 보안성이 쿠키보다 우수합니다.

 

3. 세션의 단점

- 서버에 저장되기 때문에 서버에 처리를 요구하는 부하와 저장 공간을 필요로 한다.

 

4. HTTP 세션 동작 순서

- 클라이언트가 서버로 접속을 시도한다.

- 서버는 접근한 클라이언트의 request-header field인 쿠키를 확인해 클라이언트가 해당 session-id를 보내왔는지 확인한다.

- 만약 클라이언트로부터 발송된 session-id가 없다면, 서버는 session-id를 생성해 클라이언트에게 response-header field인 set cookie 값으로 session-id를 발행한다.

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

OWASP Top 10 2017  (0) 2017.07.10
쿠키(Cookie)란?  (0) 2017.07.07
HTTP 구조 정보  (0) 2017.06.19
HTTP 개요  (0) 2017.06.12
Web 개요  (0) 2017.06.05
블로그 이미지

꼴통보안인

,

앞서 저번주에 HTTP에 대하여 간략하게 공부하였습니다. 오늘은 조금 더 들어가서 HTTP의 구조에 대해 알아보겠습니다.

 

HTTP헤더와 바디로 구성되어 있습니다.

헤더는 웹 서버 및 클라이언트 사이에서, 일반 문서 데이터 외에 추가적인 정보를 교환할 수 있도록 맨 앞에 삽입되는 요소입니다. 종류가 굉장히 다양합니다.

바디는 실제 HTTP의 내용이 들어가는 부분입니다. 일반 텍스트 형태 외에도 이진 데이터 형식도 가능합니다.

헤더와 바디는 개행(CR+LF)으로 구분을 합니다.

 

헤더는 요청 헤더(Request Header), 응답 헤더(Response Header), 일반 헤더(General Header), 엔티티 헤더(Entity Header) 총 4가지로 구성되어 있다.

 

1. 요청 헤더(Request Header)

요청 메시지 내에서만 나타나며 가장 양이 많습니다.

- From : 클라이언트 사용자 메일 주소

- Cookie : 서버에 의해 Set-Cookie로 클라이언트에게 설정된 쿠키 정보

- Referer : 바로 직전에 머물렀던 웹 링크 주소

- User-Agent : 클라이언트 S/W(브라우저) 명칭 및 버전 정보

- Accept : 클라이언트 자신이 이해 가능한 미디어 타입 및 우선순위

- Accept-Charset : 클라이언트 자신이 이해 가능한 문자 인코딩 방식

- Accept-Encoding : 클라이언트 자신이 이해 가능한 압축 방식

- Accept-Language : 클라이언트 자신이 이해 가능한 언어

- Host : 요청하는 호스트에 대한 호스트 명 및 포트 번호

- If-Modified-Since : 제시한 시간 이후에만 해당 리소스를 취득 요청

 

2. 응답 헤더(Response Header)

특정 유형의 HTTP 요청이나 특정 헤더를 수신했을때 나타납니다.

- Server : 서버 S/W 정보를 나타냄

- Set-Cookie : 서버 측에서 클라이언트에게 세션 쿠키 정보를 설정

- Expires : 지정된 일시까지 응답이 캐시로써 유효함

- Location : 리다이렉트 할때 이동 주소 혹은 새로 생성된 리소스 주소

- Allow : 해당 리소스가 지원 가능한 HTTP 메소드들을 나타냄

- Accept-Range : URI를 위한 요청 범위의 승인을 나타냄

- Age : 해당 문서의 나이를 나타냄

- ETag : 요청된 변종 엔티티 태그의 현재 값을 제공

- Proxy-authenticate : 현재 연결에 대해 프록시에 대한 적용할 수 있는 매개변수를 나타냄

 

3. 일반 헤더(General Header)

요청 및 응답 메시지 모두에서 사용 가능

- Date : 메시지를 생성한 날짜

- Connection : 클라이언트와 서버가 요청/응답 연결에 대한 옵션을 정하게 해줌

- Cache-Control : 메시지와 함께 캐시 지시자를 전달하기 위해 사용

- Pragma : 메시지와 함께 캐시 지시자를 전달하기 위해 사용(HTTP 1.1 버전에서는 사용 안함

- Trailer : 헤더 필드가 chunked transfer coding으로 인코딩 된 메시지의 trailer에서 표현된다는 것을 나타내는 필드

 

4. 엔티티 헤더(Entity Header)

메시지 내에 포함된 엔티티에 대한 구체적인 설명 등

- Content-Encoding : 개체 데이터의 압축 방식

- Content-Type : 개체에 포함되는 미디어 타입 정보

- Content-Language : 개체와 가장 잘 어울리는 언어

- Content-Length : 전달되는 메시지의 바이트 길이 또는 크기

 

HTTP 메소드는 저번주에 조금 봤기 때문에 HTTP 상태코드를 보겠습니다. HTTP 상태코드는 HTTP의 응답 메시지의 첫째 줄에 결과 응답 상태에서 서버가 코드 값을 알려주는 것입니다. 코드는 크게 1xx(처리중), 2xx(성공), 3xx(리다이렉트), 4xx(클라이언트 에러), 5xx(서버 에러) 5개로 분류되며 해당 분류 마다 굉장히 많은 종류가 있습니다.(-> IAMA 공식 HTTP Status Code Registry)

그 중에서 평소에도 흔히 볼 수있는 몇가지 상태코드만 확인해보겠습니다.

- 3xx (리다이렉트)

301 Move Permanently (영구 이동됨)

302 Found (일시 이동됨)

303 See Other (일시 이동된 사이트에 가서, GET 메소드로 리소스를 얻음)

304 Not Modified (리다이렉트와는 별 관련 없음)

307 Temperary Redirect (302와 의미적으로 같음)

- 4xx (클라이언트 에러)

400 Bad Request (요청 오류)

401 Unauthorized (권한 없음)

403 Forbidden (금지됨)

404 Not Found (발견되지 않음, 요청 리소스 없음)

- 5xx (서버 에러)

500 Internal Server Error (서버 내부 오류)

502 Bad Gateway (접속한 프록시 서버에서 내부 망의 웹서버로부터 잘못된 응답을 받음)

503 Service Unavailable (서비스 불가)

 

이상으로 HTTP 구조 정보에 대해 공부해보았습니다. 다음엔 쿠키와 세션에 관하여 공부해보겠습니다. 감사합니다.

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

OWASP Top 10 2017  (0) 2017.07.10
쿠키(Cookie)란?  (0) 2017.07.07
Session이란?  (0) 2017.06.26
HTTP 개요  (0) 2017.06.12
Web 개요  (0) 2017.06.05
블로그 이미지

꼴통보안인

,

HTTP(HyperText Transfer Protocol) 웹상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는 데에 쓰인다. TCP UDP를 사용하며, 80번 포트를 사용한다. 1996년 버전 1.0, 그리고 1999년 1.1이 각각 발표되었다.

HTTP는 클라이언트 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다. HTTP를 통해 전달되는 자료는 http:로 시작하는 URL(인터넷 주소)로 조회할 수 있다.

 

HTTP 전송 방식

HTTP 버전에 따라 전송방식이 약간 다릅니다. 기본적으로는 DNS를 통하여 IP주소를 확인하고 3-Way Hnadshake 접속 이후 데이터를 송수신 합니다.

이때 1.0 버전은 세션을 연결한 이후 하나의 데이터를 받고 이후 세션을 종료 한 이후에 다시 세션을 맺고 다음 데이터를 받게 됩니다. 속도가 느린 것이 단점입니다.

 

1.1 버전은 세션을 한 번만 연결하면 keep-alive기능을 이용하여 지속적으로 데이터를 받아올 수 있습니다. 따라서 1.0에 비해 속도가 빠릅니다.

 

Pipelining 방식도 있습니다. 여러 개의 세션을 연결한 이후에 여러 개의 요청을 받아올수 있습니다.

 

HTTP 메소드

HTTP 메소드는 클라이언트가 서버에 요청하는 메시지에 대한 메소드로서 GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH로 총 9가지가 존재한다. 하지만 보안상의 이유로 GET, POST 2개 또는 OPTIONS 포함 3개만을 허용하는 경우가 대부분입니다..

GET - 요청 URI의 정보를 가져온다.

HEAD - 요청 URI의 헤더정보만 가져온다.

POST - 요청 URI의 리소스의 새로운 정보를 보낸다.

PUT - 요청 URI에 저장될 정보를 보낸다. (전체 저장)

DELETE - 요청 URI의 리소스를 삭제한다.

CONNECT - 프록시에 사용하기 위해 예약된 메소드이다.

OPTIONS - 요청 URI에서 사용할 수 있는 METHOD를 물어본다.

TRACE - 보낸 메시지를 다시 돌려보낸다(loopback)

PATCH - 요청 URI에 저장될 정보를 보낸다. (일부 저장)

 

HTTP Response code

클라이언트에서 HTTP Request 시 서버에서 클라이언트로 보내는 응답 코드입니다.

1XX (Information)  : 정보교환

2XX (Success)       : 성공

3XX (Redirection)  : 자료의 위치 바뀜

4XX (Client Error)  : 클라이언트 오류

5XX (Server Error)  : 서버 오류

 

이상 간단하게 개요를 통하여 HTTP에 대하여 알아보았습니다.

HTTP의 경우에는 좀 더 심도있게 공부해야할 필요성을 느껴서 HTTP Header와 메소드별 요청 정보, 그리고 수 많은 응답 코드에 대해 글을 쓰며 공부를 진행하도록 하겠습니다.

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

OWASP Top 10 2017  (0) 2017.07.10
쿠키(Cookie)란?  (0) 2017.07.07
Session이란?  (0) 2017.06.26
HTTP 구조 정보  (0) 2017.06.19
Web 개요  (0) 2017.06.05
블로그 이미지

꼴통보안인

,