쿠키
- 서버는 클라이언트의 로그인 요청에 대한 응답을 작성할 때, 클라이언트 측에 저장하고 싶은 정보를
응답 헤더의 set-cookie에 담는다.
- 이후 클라이언트가 재용청할 때마다 저장된 쿠리를 요청 헤더의 cookie에 담아 보낸다.
- 서버는 쿠키에 담긴 정보를 바탕으로 해당 요청의 클라이언트가 누군지 식별할 수 있다.
- 보안에 취약, 용량제한, 브라우저간 공유 불가능 같은 단점이 있다.
- 브라우저가 닫혀도 정보를 가지고 있는다
1) Session Cookie : 메모리에만 저장되며, 브라우저가 닫힐 때 삭제
2) Persistent Cookie : 기간 설정을 하고 브라우저가 닫혀도 삭제되지 않고 기간에만 반응한다.
3) Secure Cookie : HTTPS에 사용되는 암호화된 쿠키, 실질적 보안은 안된다.
4) Third Party Cookie : 다른 도메인에 요청이 필요할 때 생성되는 쿠키, 광고 목적으로
사용되는 것이다.
장점
1) XSS로부터 안전 - 서버에서 쿠키의 httpOnly 옵션을 설정하면, Js에서 쿠키에 접근
불가
2) 대부분의 브라우저가 지원
단점
1) 매우 작은 데이터 저장 용량(4kb) → 쿠키 스토리지가 대체할 수 있음
2) CSRF(사이트 간 요청 위조) 위협 - 공격자가 사용자의 요청을 가로챈 뒤
사용자의 의지와 상관없이 보안적으로 위험한 행동을 하게끔 변조하여 부당 이익을
취하는 행위
3) 문자열만 저장 가능
세션
- sission은 비밀번호와 같은 인증 정보를 쿠키에 저장하지 않고 대신에 사용자의 식별자인
session id를 저장한다.
- 세션 ID를 탈취할 수 있고 (IP같은 것으로 해결한다) 요청이 많아지면 서버에 부하가 심해진다.
- 브라우저를 닫으면 일반적으로 끊긴다.
캐시
- 캐시는 웹 페이지 요소를 저장하기 위한 임시 저장소이다.
- 주로 브라우저에서 빠르게 랜더링을 하도록 도와주는 역할을 하는데 정적인 파일 즉, js, html, css, image
등을 가지고 있는 것이다.
토큰(Header, payload, signature)
Header
- 헤더는 jwt를 어떻게 검증하는가에 대한 내용을 담고 있다. alg는 서명시 사용하는 알고리즘이고
kid는 서명시 사용하는 키(public/private)를 식별하는 값
Payload
- JWT의 내용(토큰 생성자의 정보, 생성일시...)이나 클라이언트와 서버 간 주고받기로 한 데이터들로 구성된다.
Signature
- 점(.)을 구분자로 해서 헤더와 페이로드를 합친 문자열을 서명한 값이다. 헤더의 alg에 정의된 알고리즘과 비밀키를
이용해 생성한다.
장점
- header와 payload를 가지고 signature를 생성하므로 데이터 위변조를 막을 수 있다.
- 인증 정보에 대한 별도의 저장소가 필요없다. (서버 부하 X)
단점
- payload 자체는 암호화되지 않기 때문에 유저의 중요한 정보를 담으면 안된다.
- 토큰을 탈취당하면 대처하기 어렵다.
보안 전략
1. 짧은 만료 기한 설정
- 토큰의 만료 시간이 짧으면 탈취되더라도 금방 만료되기 때문에 피해를 최소화 할 수 있습니다. 하지만 사용자가 자주
로그인 해야하는 불편함이 있습니다.
'CS > 네트워크' 카테고리의 다른 글
XSS와 CSRF Re (0) | 2024.06.14 |
---|---|
로컬 스토리지, 세션 스토리지 (0) | 2024.06.13 |
네트워크 토폴로지 Re (0) | 2024.06.13 |
URL, URI, URN Re (0) | 2024.06.11 |
CORS(Cross-Origin-Resource-Sharing) (0) | 2024.06.07 |