IT 그리고 정보보안/Knowledge base

HTTP 쿠키 (Cookie) & 세션 (Session)

plummmm 2021. 4. 16. 04:39
반응형

이번에는 쿠키와 세션에 대해서 알아보자.

먹는 쿠키가 아니다. ㅎㅎ

 

일단 먼저 쿠키란, 웹서버에서 클라이언트를 식별하기 위한 식별 코드라고 보면 되겠다.

HTTP의 단방향성 때문에 이 멍청한... 웹서버가 클라이언트를 식별하지 못한다고 말했었다.

그래서! 쿠키가 나온 것이다. 클라이언트에 대한 정보를 저장하고 식별하는 기능으로 말이다.

먼저 그림을 보고 생각하자.

 

 

일단 쿠키는 클라이언트의 정보가 담긴 거라고 말했다. 근데 그걸 클라이언트 측에 저장한다. txt파일 형식으로.

쿠키가 저장하는 정보는 쉽게 말해, 우리가 로그인한 적이 있는 웹사이트에 다시 방문하였을 때,

내 계정을 기억하고 있거나, 인터넷 쇼핑몰에서 클릭한 적이 있는 상품을.. 쇼핑몰에 다시 방문했을 때 띄워주는

그런 것들을 말한다.

 

각 쿠키의 크기제한은 4KB 이며, 클라이언트 당 300개의 쿠키를 만들 수있다.

쿠키를 발행한 해당 웹사이트에서만 유효하며, 같은 웹사이트라도 다른 종류의 웹브라우저를 쓰면 쿠키값도 다르다.

좀더 자세히 알아보기 위해 쿠키의 구조를 간단하게 살펴보자.

 

 

1. name=value : 쿠기 변수 이름과 쿠키 값을 지정하는 필드이다.

2. domain : 쿠키 정보가 유효한 도메인을 나타내는 필드이다.

3. path : 쿠키가 어떤 경로에 적용될 지 의미한다.(적힌 값의 하위 경로 모두 포함) 보통은 ' / ' 가 쓰인다. 모든 경로라는 말.

4. expires : 쿠키의 만료 시간을 나타내는 필드이다. 

5. secure : https로 접근할 때만 사용됨.

6. httponly : 스크립트에 의하여 쿠키 접근을 제한함.

 

쿠키는 위에 expires 필드 기간이 만료되거나 사용자가 쿠키 삭제하면 생명이 다한다.

 

방금까지 설명한 쿠키를 엄밀히 말하면 Persistent Cookie 라고 일컫는다.

쿠키는 Session cookie와 Persistent cookie 두가지이다.

 

우리가 쓰는 쿠키의 특징이 Persistent cookie의 특징이다. 그렇담 세션쿠키는?

세션 쿠키는 Persistent cookie와 다르게 쿠키를 웹 브라우저 Cache에 임시 저장한다.

그리고 브라우저를 닫거나 서버에서 지정한 세션 타임이 아웃되면 만료된다.

 

이름부터 세션 쿠키인데.. 바로 뒤에 공부할 세션과 뭔가 관련있어보이지 않음?? 모르겠나.ㅋㅋ

 

쿠키는 쿠키 자체로도 기능을 하지만,

웹 어플리케이션에서 클라이언트를 식별할 수 있는 정보를 저장하는 역할이 가장 중요한 역할이다.

클라이언트를 식별할 수 있는 정보에 세션도 포함된다.

그니까 세션 쿠키는 세션에 대한 정보를 저장할 때 쓰이는 저장 방법이라고 생각하면 쉽다.

 

아 쉽게쉽게 설명하고 싶은데 말이 꼬인다. 아니.. 손이 꼬이나?

이해가 갔을런지 모르겄소.. 

 

 

그럼 이제 세션에 대해 알아보자.

세션은 기본적인 뜻은 "사용자간 혹은 컴퓨터간에 대화상태를 유지하기 위한 논리적 연결"이다.

이 기본 뜻에 입각하여 웹 환경에서 세션의 의미를 추측해보셈.

 

내가 http 설명할 때 뭐라그랬찌?? 비연결 지향형이라고. 계속 끊긴다고. 그래서 나온게 세션이다.

연결을 계속 유지해주기 위해서.

 

이때 사용되는 Session Token이라는 개념이 있다.

세션 토큰은 서버로 부터 발행되어 세션 활성화 상태 일 때 서버,클라이언트 양쪽 모두에 유지되어야 한다.

그럼 세션이 종료되면 당연히 세션 토큰은 증발.

일반적으로 웹 어플리케이션에서 제공하는 Hash값이 세션 토큰으로 사용된다.

SSS 종류에 따라 발급하는 Hash값도 다르다.

-----------------------

ASP : ASPSESSIONID

JSP : JSESSIONID

PHP : PHPSESSIONID

-----------------------

그림으로 세션 형성 과정을 보자.

 

 

뭐 없다. 보는 그대로이다.

우리가 눈여겨 볼것은 "Session Token 저장" 부분이다.

어떻게 저장되느냐에 따라 세션 토큰 관리 방식이 달라진다.

 

그럼 저장 방식에 대해 한번 알아보자.

URL Rewriting, Hidden field, Cookie에 저장 하는 방법들이 있는데,

URL Rewriting은 url에 세션 토큰을 덧붙여서 사용하는 것으로, 브라우저에서 쿠키를 못쓰게 할 때 사용하고

Hidden field는 히든 필드를 이용해 세션 토큰을 html내에 저장하는 건데..

브라우저에는 안보이지만 소스보기로 보면 바로 다보임.. 그래서 안씀

 

뭐 URL Rewriting, Hidden field 둘다 고인이 된 기술이다 안쓴다. 

Session cookie에 저장하는 방법을 거의 씀.

 

그래서 세션 쿠키의 특징이 세션의 특징이라고 알고 있는 경우가 많다. 나도 학교에서 배울때 그렇게 배웠따.

틀린말은 아닌데, 확실히 문법적인 오류가 있는건 맞다.

그렇다보니 쿠키와 세션이..

쿠키 vs 세션 이라는 약간 어긋나는 관계로 설명 되고 있다.

 

쿠키와 세션은 다르다.

쿠키가 보안이 약해서 세션이란게 갑자기 툭튀어나온게 아니라,

persistent cookie 의 보안을 강화하기위해 session cookie가 나왔는데

세션 토큰을 session cookie에 저장하는 것이다.

 

쿠키를 주민등록증이라고 한다면, 세션을 은행 대기번호표 정도로 생각하면 된다.

쿠키는 값 자체에 로그인 정보등의 중요한 정보들이 모두 담겨있어서, 노출되면 심각한 문제를 발생시킬 수있는 반면에

세션은 세션토큰이 md5 일방향 해쉬 암호로 암호화되어 임시저장 되므로 훨씬 안전하다.

 

 

너무 어려우면 Session = Session cookie 라고 생각해도 무방하긴 한데..

알면 좋잖아. 내가 설명을 잘못해서 그런데 쉬운 개념임.

반응형

'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글

OWASP top 10  (0) 2021.04.16
SQL (Structured Query Language)  (0) 2021.04.16
웹개발 언어에 대한 정리  (0) 2021.04.16
Base64 Encoding  (0) 2021.04.16
HTML Encoding  (0) 2021.04.16