쿠키에 중요한 정보를 보관하는 방법은 여러가지 보안 이슈가 있다.
이 문제를 해결하려면 중요한 정보를 모두 서버에 저장해야 한다. 그리고 클라이언트와 서버는 추정 불가능한 임의의 식별자 값으로 연결해야 한다.
이렇게 서버에 중요한 정보를 보관하고 연결을 유지하는 방법을 세션이라 한다.
로그인 정보가 서버에 넘어오면 세션 저장소에 값이 들어간다.
이때 세션ID(UUID)를 생성하는데 이 UUID는 추정이 불가능하다.
(Cookie: mySessionId=zz0101xx-bab9-4b92-9b32-dadb280f4b61)
생성된 세션 ID와 세션에 보관할 값( memberA )을 서버의 세션 저장소에 보관한다.
클라이언트와 서버는 결국 쿠키로 연결이 되어야 한다.
서버는 클라이언트에 mySessionId 라는 이름으로 세션ID 만 쿠키에 담아서 전달한다.
클라이언트는 쿠키 저장소에 mySessionId 쿠키를 보관한다.
여기서 중요한 포인트는 회원과 관련된 정보는 전혀 클라이언트에 전달하지 않는다는 것이다.
오직 추정 불가능한 세션 ID만 쿠키를 통해 클라이언트에 전달한다.

클라이언트는 요청시 항상 mySessionId 쿠키를 전달한다.
서버에서는 클라이언트가 전달한 mySessionId 쿠키 정보로 세션 저장소를 조회해서 로그인시 보관한 세션 정보를 사용한다.
정리
1. 세션을 사용해서 서버에서 중요한 정보를 관리하게 되었다. 덕분에 다음과 같은 보안 문제들을 해결할 수 있다.
2. 쿠키 값을 변조 가능, 예상 불가능한 복잡한 세션Id를 사용한다.
3. 쿠키에 보관하는 정보는 클라이언트 해킹시 털릴 가능성이 있다. 세션Id가 털려도 여기에는 중요한 정보가 없다.
4. 쿠키탈취후사용 해커가토큰을털어가도시간이지나면사용할수없도록서버에서세션의 만료시간을 짧게(예: 30분) 유지한다.
또는 해킹이 의심되는 경우 서버에서 해당 세션을 강제로 제거하면 된다.
'Spring' 카테고리의 다른 글
SQL Mapper와 ORM 기술 (0) | 2023.06.28 |
---|---|
JDBC의 등장 이유 (0) | 2023.06.27 |
쿠키와 보안문제 (0) | 2023.06.27 |
로그인 처리 (쿠키) (0) | 2023.06.27 |
@ModelAttribute, @RequestBody (0) | 2023.06.26 |