반응형
1. HTTP의 특징
- 비연결성 (connectionless)
- 클라이언트의 요청을 받고 응답을 하면 연결을 끊어 버리는 특징
- 무상태성 (stateless)
- 통신이 끝나면 상태를 유지하지 않는 특징
왜 HTTP는 비연결성과 무상태성이란 특성을 가질까?
|
- 그러나 상태 정보를 유지해야 할 경우가 있다. 예를 들어서 로그인 상태 유지 !
2. 🍪 쿠키란?
- 쿠키는 클라이언트 로컬에 저장되는 키와 값이 들어있는 형식의 데이터 파일
- 세션 쿠키 (Session Cookie)
- 브라우저내에 저장되어 브라우저 종료시 쿠키를 삭제
- 지속 쿠키 (Persistent Cookie)
- 만료 시간이 지정되면, 로컬에 파일로 저장 되므로, 브라우저를 닫거나 컴퓨터를 재시작해도 남아있다.
3. 쿠키 동작 방법
reponse 헤더에 Set-Cookie를 사용해서 쿠키를 저장할 수 있도록 한다
Set-Cookie:user="lily";domain="demo.com";path="/hello" |
어떤 웹사이트의 경로에서 쿠키를 읽을 수 있는 지에 대해 제어 가능하다.
- 쿠키의 캐싱
쿠키를 캐싱하게 되면, 이전 사용자의 쿠키가 다른 사용자에게 할당되거나 다른 사람에게 노출 될 수 있다.
Cache-Control:no-cache="Set-Cookie" |
따라서 브라우저에서 서버의 'Set-Cookie'헤더를 캐시하지 않도록 설정할 수 있다.
4. 쿠키의 단점
사용자에게 저장되기 때문에 임의로 고치거나 지우거나 가로채기 쉽다. 따라서 쿠키에는 민감한 정보를 담지 않는 것이 좋다.
5. 세션이란?
- 세션 아이디는 웹 브라우저당 한개씩 생성, 브라우저 종료 시 소멸
- 서버에서 클라이언트 구분을 위해 세션 ID를 부여하고, 브라우저를 종료할 때까지 상태를 유지한다.
6. 세션의 동작 방식
- 클라이언트가 서버에 처음으로 Request를 보낸다.
- 서버에서 session Id 값이 쿠키에 없는 것을 확인하고 새로 발급하여 응답한다.
- 클라이언트는 쿠키를 이용해 세션 ID를 저장하고 있는다.
- 서버에 요청을 보낼 때마다 세션 ID를 서버에 전달한다.
- 클라이언트가 로그인을 할경우, 사용자 정보로 갱신하고 새로운 session id를 발급하여 응답한다.
- 브라우저 종료시 session id 제거
- 주의점
- 사용자가 많아질수록 많은 서버 메모리를 차지한다.
7. 쿠키와 세션 비교 차이점
- 보안 : 세션 방식이 보안 면에서 더 우수하다
- 라이프 사이클 : 세션은 브라우저 종료가 되면 만료시간에 상관없이 삭제된다.
과연 세션 방식이 보안 면에서 우수할까?
|
8. 보안 : Session Attacks
- Session Token Hijacking
- 공격자가 토큰을 얻을 수 있는 경우
- Solution : HTTPS 사용 (SSL/TLS encryption 보장)
- Cross-Site Request Forgery (CSRF)
- 브라우저는 서버에 대한 쿠키를 항상 포함하고 있다.
- 예시)
- 은행 사이트에 로그인 한 후에
- 공격자의 사이트에 방문한다
- 공격자는 은행 이체 form을 채워 은행 사이트에 요청을 보낸다.
- Solution
- Referrer 검증 : request의 referrer을 확인하여 domain이 일치하는 지 검증 (ex. wooribank.com)
- CSRF Token 사용 : 사용자의 세션에 난수값을 저장하고, 요청마다 난수 값을 포함하여 전송한다. 서버에서는 세션에 저장된 값과 요청 파라미터에서 전달되는 값이 일치하는 지 검증한다
반응형
'CS' 카테고리의 다른 글
웹 브러우저에서의 양방향 통신 방식 (0) | 2021.11.23 |
---|---|
[Spring] 스프링의 에러 처리(Error Handling) (0) | 2021.10.29 |
도커와 쿠버네티스 (0) | 2021.08.31 |
함수형 프로그래밍 (0) | 2021.08.27 |
[Spring] ControllerAdvice가 어떻게 작동할까? (0) | 2021.08.22 |