-
로그인 인증 - 쿠키, 세션, 세션아이디Web - Security/Login 2023. 4. 29. 21:35
내가 이용하려고 하는 사이트가 있다면 로그인 과정을 반드시 거치게 되어있다
또한 로그인을 이용하여 나만의 정보를 작성하거나 변경하는 등 다양한 작업을 할 수 있다
로그인 과정에 대해 공부하면서 로그인에 필요한 쿠키, 세션에 대해 정리를 해 보았다
클라이언트, 서버
- 클라이언트
클라이언트( Client )란 물건을 사고 파는데 있어서 고객의 입장이다
웹사이트에 접속을 해서 이용을 하는 우리들은 클라이언트 이다- 서버
서버( Server )란 물건을 사고 파는 데 있어서 판매자의 입장이다
서버는 클라이언트들로 오는 정보를 받아들이고 정보에 대한 답을 해준다쿠키
- 쿠키
로그인을 완료하고 서버와 내가 통신을 하는 과정에서 서버에게 나의 요청을 알리기 위해선 이 정보가 나의 요청임을 서버에게 알려 줘야 한다
만약 내가 서버로 보내는 정보가 나의 것이라는 내용이 없으면 서버 입장에서는 내가 보낸 정보 말고 다른 정보들도 처리해야 하기에 이 정보가 누구의 요청인지 알 수 없게 된다
쿠키는 Key와 Value로 이루어져 있으며 서버가 클라이언트에게 쿠키를 발급하면 클라이언트는 서버에게 정보를 보낼 때마다 쿠키를 같이 보내게 되어있다
또한 이 쿠키는 웹 브라우저( Chrome, Safari, Edge, Wale 등 )에 저장이 되어 있어 로그인을 한 상태에서 나의 정보를 이용하여 게시글을 작성하거나 마이페이지로 이동하는 등 나를 증명해 주는 신분증 역할을 한다
쿠키는 내가 사용하는 웹 브라우저에 저장되어 있기에 다음에 다시 로그인을 하게 된다면 이전에 볼 수 있었던 광고가 나타나지 않게 되는 등 클라이언트의 편리성이 증가한다
# Connectionless # Stateless
- 웹 브라우저
웹 브라우저에서 로그인을 하게 되면 개발자도구에서 쿠키를 확인해 볼 수 있다
윈도우는 F12 키를 누르면 개발자 도구가 나타나며 Mac 은 command + option + i 를 통하여 개발자 도구를 열 수 있다
위 사진에서 상단에 Application을 선택 한 다음 목록에 있는 Cookies를 클릭하면 아래에 나의 쿠키에 대한 정보를 확인할 수 있다 ( 현재 구글에 로그인한 상태여서 구글에 대한 쿠키만 보인다 )
- 쿠키의 유무
위에는 쿠키가 없을 때, 아래는 쿠키가 있을 때를 그려보았다
실제 쿠키는 위와 같지 않고 그냥 이해하기 편하게 하기 위해 ID = ruang으로 간단하게 그렸다
위 사진과 같이 서버로 정보를 전달할 때마다 내가 보낸 정보( 쿠키 )라는 것을 같이 보내줘야 한다- 쿠키 변조
쿠키가 있을 때와 없을 때의 통신은 위 그림과 같이 달라지게 된다
쿠키는 사용자의 웹 브라우저에 저장이 되기에 서버는 쿠키와 같이 오는 정보를 판단하여 이용자를 식별하고 이용자의 요청에 대한 정보를 응답해 준다
하지만 웹 브라우저에 저장이 되어있는 쿠키를 내가 바꿔서 서버로 보낸다면 어떻게 될까?
만약 나의 쿠키값이 ruang이었는데 administor로 바꿔서 보낸다면 administor에 대한 정보를 나에게 알려줄 것이다
그래서 서버는 클라이언트 측의 정보를 100% 믿으면 안 된다
세션
쿠키는 클라이언트 측에서 저장을 하여 서버로 보내기 때문에 보안에 취약하다
그래서 서버(Session - Storage)는 클라이언트에게 세션을 발급하여 클라이언트가 진짜인지 가짜인지를 구분하게 된다
처음 로그인 할 때 쿠키의 정보를 보고 서버는 쿠키와 session을 같이 클라이언트에게 보낸다
이후 클라이언트는 서버에 정보를 보낼 때마다 서버가 같이 보내준 세션을 같이 보내줘야 하며 세션을 같이 보내주지 않으면 쿠키 변조를 통한 정보유출이 발생할 수 있어 서버는 클라이언트의 요청을 거절한다
또한 세션은 클라이언트마다 정해진 값이 아니고 매번 값이 바뀌기에 유동적이고 로그아웃을 하게 되면 세션을 파괴시키면서 클라이언트에 대한 정보를 지워버린다
세션 아이디
서버는 나를 제외한 여러명의 클라이언트와 통신을 하기 때문에 여러가지의 세션을 가지고 있어야 한다
그래서 세션값에 1, 2, 3 ... 17, 108 ... 999등 세션을 구별하기 위한 번호와 같이 저장이 된다
그리고 이 번호는 세션 아이디라고 생각하면 된다세션아이디는 세션을 클라이언트측에 전달할 때 같이 전달이 되며 세션아이디는 클라이언트의 쿠키에 저장이 된다
세션아이디를 받은 클라이언트는 다음에 정보를 전달할때 세션아이디를 서버로 전달하여 서버는 전달받은 세션아이디로 이용자를 식별하게 된다
위 사진에서 SSID 부분에 Value에 있는 값이 세션 아이디값이다
Connectionless
하나의 요청에 하나의 응답을 한 뒤 연결을 종료한다Stateless
통신이 끝난 이후 통신 상태에 대한 정보를 저장하지 않는다728x90'Web - Security > Login' 카테고리의 다른 글
[JS, PHP, MYSQL] 로그인, 로그인 우회 - 3.2 (0) 2023.05.10 [JS, PHP, MYSQL] 로그인, 로그인 우회 - 3.1 (0) 2023.05.10 [JS, PHP, MYSQL] 로그인, 로그인 우회 - 2.2 (0) 2023.05.04 [JS, PHP, MYSQL] 로그인, 로그인 우회 - 2.1 (0) 2023.05.04 [JS, PHP, MYSQL] 로그인, 로그인 우회 - 1 (0) 2023.04.29