Web - 쿠키,세션

Seongjin Jo·2023년 1월 13일
0

Web

목록 보기
1/3

💥 서버 인증 방식


HTTP

모바일이나 웹서비스에서 가장 많이 쓰이는 통신 방식은 HTTP통신이다.

HTTP통신 2가지의 특성을 가지고 있다.

  • Connectionsless : 요청을 하고 응답을 받게 되면 서로 접속을 끊는 특성이 있다.
  • Stateless : 접속을 끊는 순간 이전 상태 정보를 유지하지 않는 특성을 가지고 있다.

즉, 만약에 로그인을 하게 된다면 이전 상태 정보를 유지하지 않기 때문에 여러 서비스를 누를 때마다 이 사람이 로그인을 했는지 알 방법이 없다. 때문에 이동할 때마다 로그인을 다시 새로 해줘야한다.
이러한 문제점을 해결하려고 나온 것이 쿠키/세션/토큰 이다.

쿠키

서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달한다. 그러면 브라우저는 앞으로 해당 쿠키를 지속해서 보내준다.

웹에서 HTTP요청으로 로그인 ID,PW를 보내면 서버에서 회원저장소에있는 회원 정보를 쿠키에 담아서 보내준다. 그러면 클라이언트 쿠키 저장소에 그 쿠키를 저장해뒀다가 앞으로 쿠키를 계속 사용해서 서버에 보내서 인증을 받는다.

쿠키를 사용해서 로그인Id를 전달해서 로그인을 유지할 수 있다.
그런데 여기에는 심각한 보안 문제가 있다.

  • 1.쿠키 값은 임의로 변경할 수 있다.
  • 2.쿠키에 보관된 정보는 훔쳐갈 수 있다.
  • 3.해커가 쿠키를 한번 훔쳐가면 평생 사용할 수 있다.

쿠키에는 영속 쿠키와 세션 쿠키가 있다.

  • 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지
  • 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지
    쿠키는 요청시 쿠키의 값을 그대로 보내기 때문에 보안에 취약하고 유출, 조작 당할 위험이 존재한다. 이 때문에 로그인에 단독으로 사용되지 않고 세션과 같이 사용된다.

쿠키는 그럼 어디에 사용될까?

  • 예를 들어 사이트에서 로그인을 할때 "아이디 기억" 체크 박스, "오늘 이창을 보지 않음", 쇼핑몰 장바구니와 같은 곳에 쓰인다고 할 수 있다.

세션

쿠키에 중요한 정보를 보관하는 방법은 여러가지 보안 이슈가 있다. 이러한 문제를 해결하려면 결국에 중요한 정보를 모두 서버에 저장해야한다. 그리고 클라이언트와 서버는 추정 불가능한 임의의 식별자 값으로 연결해야 한다. 이렇게 서버에 중요한 정보를 보관하고 연결을 유지하는 방법을 세션이라 한다.

세션 동작 원리

사용자가 loginId,password 정보를 전달하면 서버에서 해당 사용자가 맞는지 확인한다.

여기서 세션 ID를 생성하는데, 추정이 불가능해야 한다. UUID로 만들게되면 추정이 불가능 하다. 생성된 세션ID와 세션에 보관할 값(memberA)을 서버의 세션 저장소에 보관한다.

클라이언트와 서버는 결국 쿠키로 연결되어야 한다. 서버는 클라이언트에 mySessionId라는 이름으로 세션ID만 쿠키에 담아서 전달한다. 클라이언트는 쿠키 저장소에 mySessionId 쿠키를 보관한다. 클라이언트에서 이렇게 저장된 세션ID를 쿠키를 이용해서 서버로 요청을 보내면 서버는 쿠키에 담겨있는 세션ID와 세션 저장소에 있는 정보와 대조한 후 데이터를 가져온다

여기서 중요한 점,

  • 회원과 관련된 정보는 전혀 클라이언트에게 전달하지 않는다는 것이다.
  • 오직 추정 불가능한 세션ID만 쿠키를 통해 클라이언트에 전달한다.

세션 장점

  • 1.세션은 쿠키를 기반으로 하지만 클라이언트에 저장하는 쿠키와는 다르게 서버에 저장하여 관리한다.
  • 2.서버에서는 클라이언트를 구별하기 위해 각각의 세션ID를 클라이언트마다 부여하게되며 클라이언트가 종료되기 전까지 유지한다.
  • 3.클라이언트에 저장하는 쿠키보다는 보안이 좋다.

0개의 댓글