쿠키 와 세션은 컴퓨터 네트워크를 공부하다보면 자주 접하는 용어입니다.
심지어 스마트폰으로 여러 사이트를 접속하다 보면 가끔 "쿠키를 허용하시겠습니까?" 라는 문구가 뜹니다.
대체 쿠키가 뭘까요? 세션은 또 무엇이고 쿠키랑 무슨연관성이 있길레 같이 언급되는 걸까요?
오늘은 쿠키와 세션에 대하여 알아보겠습니다.
<목차>
1. HTTP 의 특성
- 비연결지향성(Connectionless)
- 무상태지향성(Stateless)
2. 쿠키(Cookie)
3. 세션(Session)
1. HTTP 의 특성
- 비연결지향성(Connectionless)
HTTP는 비연결지향적인 프로토콜 입니다.
비연결지향적이라는 뜻은 요청/응답 이후에 그 연결을 더이상 지속하지 않는다는 뜻입니다.
요청 후 응답을 받으면 이후 연결은 바로 끊어집니다.
> 장점 : 서버의 자원 절약 , 연결 유지 비용 ↓
> 단점 : 여러 요청이 한번에 올 경우 , 매번 새로운 연결을 설정해야 하여 비효율적이다.
- 무상태지향성 (Stateless)
HTTP는 무상태지향적인 프로토콜입니다.
무상태지향적이라는 뜻은 이전 요청의 상태를 기억하지 않는다는 뜻입니다.
가령 이전 요청이 '무너' 라는 유저에게 왔다고 해서 다음 요청도 '무너' 일 것이라 기억해주지 않는다는 뜻입니다.
저희가 사용하는 사이트들은 한번 로그인하면 마이페이지,글쓰기,메일함 등등 지속적으로 서비스를 이용합니다.
다른 페이지로 갈때마다 계속 로그인 하는것이 아닙니다.
하지만 저희가 사용하는 모든 서버의 주소는 HTTP 로 시작을 합니다.ex) (https://www.naver.com)
분명 HTTP 는 연결이 끊어지는 비연결지향성 , 무상태지향성 이라고 했는데 이게 어떻게 가능한걸까요?
상태유지를 위해 있는것이 바로 쿠키 와 세션 입니다.
2. 쿠키(Cookie)
쿠키란 클라이언트(사용자)가 웹사이트에 접속할때 , 서버측에서 만들어서 클라이언트 측에 저장하는 정보 파일 입니다.이 쿠키에 "나 '무너'에요" 라고 적어보냄으로써 서버가 계속 '무너'라고 인식하게끔 만드는거죠.여기서 중요한 점은 클라이언트 측에 저장한다는 점입니다.
<쿠키의 특징>
- Key &value 로 이루어져 있는 데이터 파일입니다. [예를들면 Cookie = user(key) : Mooner(value) ]
- 도메인당 20개의 쿠키를 가질수 있습니다. 하나의 쿠키당 4KB까지 저장가능.
- 이름 , 값 , 유효시간 , 도메인 ,경로 ,httponly 여부 로 이루어져 있습니다.
유용해보이는 쿠키에도 문제점이 있습니다.
<쿠키 조작&스니핑 취약점>
쿠키에 포함되는 내용은 위에서 언급했듯 "user : mooner" 이런식으로 '명시적' 입니다.
만약 mooner 라는 값을 admin 이나 다른 유저의 이름으로 바꾼다면?
서버는 제가 mooner 가 아닌 다른 누군가로 착각하여 다른사람의 정보를 줄 수 있는 문제점이 있습니다..
또한 쿠키에 있는 정보가 저장되는 위치는 '클라이언트측' 입니다.
요청과정에서 도청(스니핑)을 당할수도 있고 ,브라우저를 닫아도 클라이언트 측에 일정시간 정보가 남아있기도 합니다.
그 단점을 보완하고자 나온것이 세션 입니다!
3. 세션(Session)
- 세션이란 쿠키와 기능적으론 유사하지만 , 가장 큰 차이점은 정보파일이 서버측에 저장이 된다는 것 입니다.
- 정보파일을 서버측에 저장하게 되니 서버만 안전하다면 보안상으로 쿠키보다 적합합니다.
- 서버측에 저장하는 것이니 클라이언트측의 요청에서 Repeter 를 통해 조작도 불가능합니다.
- 또한 브라우저를 닫는 순간 정보파일 또한 사라지기 때문에 이 또한 보안상 큰 이점이 됩니다.
> 하지만 서버측에 저장하는 만큼 사용자가 많아질수록 서버측 부하가 심하다는 단점이 있습니다.
세션에선 쿠키에서 그랬듯 서버측에서 식별정보를 만들어서 주는데 쿠키안에 세션ID 라는것을 줍니다.
쿠키는 user=mooner 라는 식으로 '명시적' 이라면 , 세션ID 는 user=fkf319gsDF2523fwfa 이런식으로 '불규칙'합니다.
그러니 쿠키조작을 한다한들 무슨값으로 바꿔야 할지 공격자가 몰라서 보안상으로 안전하다는 이점이 있죠.
※ 그러면 쿠키를 만들때 애초에 복잡하게 만들면 굳이 세션ID 를 안써도 되는것이 아닌가요?
> 세션ID 를 사용하면 주고받는 정보 크기가 세션ID 밖에 없습니다.
하지만 쿠키를 사용하게되면? 주고받는 정보 크기가 쿠키에 담긴 데이터 크기만큼 오고가고 합니다.
서버측에선 이 많은 정보를 매 요청마다 다시계산해야 하므로 매우 비효율적입니다.
그리고 위에서 언급했듯 쿠키에 저장할 수 있는 데이터 크기는 4KB 입니다.
복잡한 데이터를 저장하려면 이 크기가 초과될 수도 있습니다.
'WEB 지식' 카테고리의 다른 글
SOP & CORS 가 뭘까? (0) | 2024.07.12 |
---|---|
WEB-WAS-DB 란? (0) | 2024.05.28 |