로그인처리1 - 쿠키,세션(1)

JIWOO YUN·2024년 2월 23일
0

SpringMVC2

목록 보기
17/26

도메인의 중요성

  • 도메인 = 화면, UI, 기술 인프라 등등의 영역을 제외한 시스템이 구현해야하는 핵심 비즈니스 영역
    • web부분을 다른 기술로 바꾼다해도 도메인은 그대로 유지되어야함.
    • 이렇게 되게 할려면 web은 domain을 알고 있지만 domain은 web을 몰라야 가능
      • domain은 web을 모르기 때문에 web패키지를 모두 삭제한다해도 domain에는 전혀 영향이 없다.
    • web은 domain을 의존하도록 단방향으로 만들어줘야함.
      • 만들어 둔 영역을 다른 기술로 바꾸는게 가능하다.

쿠키를 사용해서 로그인 상태를 유지하기

  • 쿼리 파라미터를 계속 유지하면서 보내는것은 매우 어려우면서 번거로운 작업이기 때문에 쿠키를 사용해보자.
  • 서버에서 로그인에 성공하게 되면 HTTP 응답에 쿼리를 답아서 브라우저에 전달
    • 브라우저는 앞으로 해당 쿠키를 지속해서 보내줌.

쿠키의 종류 2가지

  • 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지
  • 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시까지만 유지

쿠키와 보완 문제

  • 쿠키 값은 임의로 변경할 수있다.

    • 클라이언트가 쿠키를 강제로 변경시 다른 사용자가되버림.
    • 웹 브라우저 개발자 모드에서 변경가능
  • 쿠키에 보관된 정보는 훔쳐갈 수있음.

    • 쿠키에 개인정보나 신용카드 정보가 들어있다는 가정을하게 될 경우
      • 이 정보의 경우 웹 브라우저에도 보관되고 네트워크 요청마다 클라이언트에서 서버로 전달됨.
      • 쿠키의 정보의 경우 로컬 PC에서도 털릴수있으며, 네트워크 전송 구간에서도 털릴 수있음
  • 해커가 쿠키를 훔쳐가면 평생 사용이 가능하다.

    • 훔쳐간 쿠키를 이용해서 악의적인 요청을 계속 보낼수 있음.

보안문제에 대한 대안

  • 쿠키에 중요한 값을 노출하지 않으면서 예측 불가능한 임의의 토큰을 노출하고, 서버에서 토큰과 사용자 id를 매핑해서 인식한다.
    • 해커가 임의의 값을 넣어도 찾을수 없도록 예상 불가능해야함.
  • 토큰을 만약 털어간다해도 토큰 만료기간을 짧게 유지해서 토큰이 빠르게 만료되도록 하거나 해킹이 의심될경우 해당토큰을 강제로 제거하기.

세션 동작 방식

  • 중요한 정보는 모두 서버에 저장하는 방식
    • 클라이언트와 서버는 추정 불간으한 임의의 식별자 값으로 연결

세션 관리

  • 사용자가 LoginId,Password 정보를 전달하면 서버에서 해당 사용자가 맞는지 확인
    • 맞다면 세션 ID를 생성
      • UUID 는 추정이 불가능하기 때문에 사용할수 있음.
    • 생성된 세션 ID 와 세션에 보관할 값을 서버의 세션 저장소에 보관
  • 서버는 클라이언트에게 mySessionId라는 이름으로 세션 ID만 쿠키에 담아서 전달.
    • 클라이언트는 쿠키 저장소에 mySessionId 쿠키를 보관함.

중요점

  • 회원과 관련된 정보는 전혀 클라이언트에 전달되지않음.
  • 추정 불가능한 세션ID만 쿠키를 통해서 클라이언트에 전달됨.

로그인 이후 접근시

  • 클라이언트는 요청시 항상 mySessionId 쿠키를 전달
  • 서버에서 클라이언트가 전달한 mySessionId 쿠키 정보로 세션 저장소를 조회해서 로그인시 보관한 세션 정보 사용

세션 사용시 보안 문제 해결

  • 쿠키 값을 변조할 수 있다. --> 예상 불가능한 복잡한 세션 id를 사용한다.
  • 쿠키에 보관하는 정보는 클라이언트 해킹시 털릴 가능성이 있다. -> 세션 id가 털려도 이안에는 중요한 정보가 없음
  • 쿠키 탈취 후 사용 -> 해커가 토큰을 털어가도 시간이 지나면 사용할 수 없도록 세션의 만료시간을 짧게 유지.
    • 해킹 의심시 서버에서 해당 세션을 강제로 제거하면됨.
profile
열심히하자

0개의 댓글