2024. 5. 13. 10:08ㆍHTTP
Set-Cookie: 서버에서 클라이언트로 쿠키 전달받고 응답받는다.
Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청 받을 서버로 전달받는다.
쿠키를 미사용한 상태라면,, 로그인을 하고 어떤 페이지를 들어가도 로그인을 안한 자와 구분이 되지 않는다.
이 대안으로는.
모든 요청에 사용자 정보를 포함해서 보낸다면?
모든 요청과 링크에 사용자 정보 포함되도록 개발을 매번 해야하므로 번거로우며,, 브라우저를 완전히 종료하고 다시 열면 또 다시 보내야하는 문제가 있을 수 있다..
그래서 해결하기 위해 도입된 게 쿠키다!
로그인을 하면 ME라는 셋 쿠키에 쿠키 헤더를 만들어 보낸다. 그럼 웹 브라우저의 쿠키 저장소에 USER는 ME라는 정보가 저장된다. 자동으로 웹 브라우저에서 요청이 보내질 때마다 해당되는 쿠키를 찾아서 헤더를 만들고 다시 보낸다! 그럼 서버에서는 ME라는 것을 알 수 있다.
쿠키는 모든 요청에 쿠키 정보를 자동적으로 포함시키게 한다.
하지만 모든 정보에 쿠키를 담게 된다면 보안적인 문제나 여러 문제가 발생할 수 있으므로 이를 제한하는 부분도 있다.
ex) set-cookie:sessionId=abcde1234;expires=Sat,26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
- 사용처
- 사용자 로그인 세션 관리
- 광고 정보 트래킹
- 쿠키 정보는 항상 서버에 전송된다.
- 네트워크 트래픽을 추가적으로 유발할 수 있다.
- 최소한의 정보만 사용해야 한다. ex) 세션 id, 인증 토큰
- 만약에 서버에 전송하지 않고 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지(localStorage, sessionStorage)를 참고하면 된다. 단, 보안에 민간함 데이터인 주민번호나 신용카드 등등의 경우 저장하면 안 된다.
쿠키의 생명주기
- set-cookie: expires=Sat,26-Dec-2020 00:00:00 GMT;
만료일이 되면 쿠키가 삭제된다.
- set-cookie: max-age = 3600(3600초)
0이나 음수를 지정하면 쿠키 삭제된다.
- 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료될 때까지만 유지된다.
- 영속 쿠키: 만료 날자를 입력하면 해당 날짜까지만 유지된다.
쿠키의 도메인
쿠키는 도메인을 지정해서 저장할 수 있다.
ex) domain=example.org
- 명시한 경우
- domain=example.org를 지정해서 쿠키를 생성하면 example.org는 물론이고 dev.example.org도 쿠키를 접근할 수 있다.
- 생략한 경우
- 현재 문서 기준 도메인만 적용된다.
- example.org에서 쿠키를 생성하고 domain지정을 생략할 경우 example.org에서만 쿠키가 접근이 가능하고 위와는 다르게 dev.example.org는 쿠키가 접근되지 않는다.
쿠키의 경로
ex) path=/home
이 경로를 포함한 하위 경로 페이지만 쿠키가 접근 가능하다.
일반적으로 path=/루트로 지정된다.
그럼 예를 들면 path=/home으로 지정했을 경우,
/home, /home/level1,/home/level1/level2는 모두 가능하지만 /hello 는 불가능하다.
쿠키의 보안
- Secure
- 원래는 쿠키는 http,https를 구분하지 않고 전송하지만 Secure를 적용하면 https인 경우에만 전송된다.
- HttpOnly
- XSS(XSS: Cross-Site Scripting) 공격을 방지한다.
- 자바스크립트에서는 접근이 불가하고 (document.cookie) HTTP 전송에만 사용한다.
- SameSite
- XSRF(CSRF: Cross-Site Request Forgery: ) 공격을 방지한다.
- 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키를 전송한다.
참고
XSS(XSS: Cross-Site Scripting)
웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점
XSRF(CSRF: Cross-Site Request Forgery )
사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격
'HTTP' 카테고리의 다른 글
20240515 HTTP (10) - 검증 헤더와 조건부 요청(ETag) (0) | 2024.05.15 |
---|---|
20240515 HTTP (9) - 캐시와 검증 헤더와 조건부 요청(Last-Modified) (0) | 2024.05.15 |
20240509 HTTP (7) - 헤더( 전송, 정보, 인증) (0) | 2024.05.09 |
20240507 HTTP (6) - 헤더 개요, 표현, 협상 (0) | 2024.05.07 |
20240503 HTTP (5) - 클라이언트에서 서버로 데이터 전송 (0) | 2024.05.03 |