사이드바 영역으로 건너뛰기

쿠키 cookie

많은 분들은 이미 알고 계신 내용이겠지만, 웹의 필수적인 요소 중 하나인 쿠키cookie에 대한 설명과 간단한 응용법에 대해 포스팅 하겠습니다.

 

간단히 말하자면, 쿠키는 웹서버가 사용자의 컴퓨터에 자신이 필요한 정보를 심어놓기 위한 파일입니다. 사용자가 웹서버에 특정 정보를 요청했을 때, 웹서버에서는 아래에서 설명할 HTTP 헤더를 통해 레퍼러referer, 사용자의 브라우저 종류 등 여러가지 정보를 얻을 수 있습니다. 이와 함께 웹서버는 쿠키를 통해 미리 자신이 심어놓은 정보를 얻어올 수 있죠.

 

웹서버가 쿠키를 심는 방법은 매우 간단합니다. 웹에서 정보를 전달하고 전달받기 위해서 HTTP 프로토콜(통신규약)을 사용합니다. 웹브라우저의 주소창에 http://라고 시작하는 것도 HTTP 프로토콜을 사용하겠다는 의미이죠. 이 HTTP 프로토콜에서는 요청한 정보(HTML 문서 등)의 앞에 특정 정보들을 먼저 보냅니다. 이를 HTTP 헤더라고 부르는데, 이를테면 웹서버의 호스트 이름(jinbo.net 등), 문서의 캐릭터셋(EUC-KR, UTF-8 등), 문서가 갱신된 시간 등이 여기에 들어가게 되죠. 쿠키도 HTTP 헤더에 한 항목으로 들어가며, 웹서버에서 헤더에 특정 쿠키 정보를 넣어 보내면 사용자의 웹브라우저는 이 정보를 받아 자신의 하드디스크에 저장합니다.

 

웹브라우저가 저장한 쿠키 정보를 확인하는 방법은 브라우저마다 다른데, IE 5.0이상의 경우

 * "도구" -> "인터넷 옵션" -> "일반"(탭) -> "임시인터넷파일"의 "설정" -> "파일보기"

를 통해 확인할 수 있습니다. "Cookie:renegade@abc.net"로 표시된 파일들이 IE가 저장한 쿠키들입니다.

불여우를 사용하신다면 쿠키 정보를 보다 쉽게 볼 수 있습니다. 제가 가진 불여우가 영문판이라-_- 이를 기준으로 본다면,

 * "Tools" -> "Options" -> 왼쪽 메뉴에서 "Privacy" ->"Cookies" 항목에서 "View Cookies"

를 선택하면 현재 저장되어 있는 쿠키 정보를 쉽게 볼 수 있습니다.

 

쿠키의 내용을 보면 뭔가 복잡해 보이지만, 규칙은 단순합니다. 쿠키의 기준은 사이트의 경로와 쿠키 이름, 그리고 쿠키값입니다. blog.jinbo.net/renegade에 curr_redlog라는 이름을 가진 쿠키가 있는데, 이 쿠키는 "renegade"라는 값을 가진다...는 식이죠. 만약 제가 제 블로그에 들렀다가 다른 곳으로 이동한 뒤, 다시 제 블로그로 돌아왔을때 이 쿠키가 남아있다면, 제 웹브라우저는 웹서버에 자동으로 쿠키값을 보내주게 됩니다. 웹서버에서는 이 값을 사용해서 원하는 동작을 보다 수월하게 할 수 있게 되는 셈이죠.

 

현재 웹어플리케이션에서 쿠키를 사용하는 곳은 매우 많습니다. 대표적인 예가 로그인 화면에서의 "ID 저장" 기능인데요, 웹서버는 사용자가 입력해서 인증에 성공한 ID를 사용자의 컴퓨터에 쿠키로 심어놓습니다. 만약 이 사용자가 다음에 다시 같은 로그인 화면을 찾을 때, 저장해 놓은 쿠키값을 읽어 미리 ID 입력폼에 넣어주는 식이죠. 이외에도 사용자 인증에서 중요한 역할을 하는 세션ID도 일반적으로 쿠키를 사용하며, 알게모르게 쿠키를 사용하는 곳이 대단히 많습니다.(만약 사용자가 이전에 했던 동작을 기억해서 나중에 자동으로 해 주는 기능이 있다고 한다면 99.99% 쿠키를 사용한다고 보시면 됩니다.)

 

이렇게 쿠키를 통해 특정 사용자의 정보를 쉽게 얻을 수 있습니다. 따라서 이를 악용하는 방법도 많은데, XSS(Cross Site Scripting)를 통해 타인의 쿠키를 훔쳐 세션 하이재킹하는 해킹방법이나 사용자의 웹서핑 경로를 기록하는 트래킹 쿠키 등이 대표적인 예가 될 수 있겠네요. 이는 나중에 좀 더 자세히 설명하겠습니다.

 

주저리주저리 뭔가 길어지고 말았는데, 원래 포스팅의 목적과는 점차 거리가 멀어지는군요-_- 다음 포스트에서 원래 포스팅의 목적인 쿠키의 동작을 이용한 방문자 카운터 올리기-_-를 쓰도록 하겠습니다. 다음 이 시간에 만나여~ ^_^;;;

 

* 참고 링크

마이크로소프트.com의 쿠키 설명

terms.co.kr에서의 쿠키 설명

 

 


진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크