본문 바로가기
Today I learned

2020 10 24

by soheemon 2020. 10. 24.

쿠키의 일반적인 특징

  • HTTP 요청을 받은 후 서버는 응답에 (정확히는 Set-Cookie 헤더를 사용하여) 쿠키를 실어 보낼 수 있다.
  • 쿠키는 일반적으로 브라우저에 의해 저장되며, 동일한 서버로 요청을 보낼때 함께 실어져서 보내진다.
  • 특정 도메인 및 경로에 대해 제한을 설정할 수 있어서. 쿠키가 전송되는 특정 위치를 제한할 수 있다.
  • 쿠키는 모든 요청과 함께 전송되므로, 모바일 데이터 연결의 경우 성능을 저하시킬 수 있다. (또한 쿠키를 남용하면 request header가 너무 커져서  413에러가 발생하는 경우도 있다.)
// 서버가 set-cookie헤더를 사용하여 브라우저에 쿠키를 저장하도록 한다.
HTTP/2.0 200 OK
Content-Type: text/html
Set-Cookie: yummy_cookie=choco

// 다음 request를 전송할때 브라우저는 도메인에 해당하는 이전에 저장된 모든 쿠키를
// 쿠키 헤더를 사용하여 서버로 다시 보낸다.
GET /sample_page.html HTTP/2.0
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry

쿠키의 수명

세션 쿠키는 현재 세션이 끝나면 삭제된다.(하지만, 일부 브라우저는 다시 시작할때 세션 복원을 사용하므로 세션 쿠키가 무기한 오래 지속될 수 있다.)

영구 쿠키는 지정된 날짜 또는 특성에 의해 저장된 기간 후에 삭제된다.(클라이언트를 기준으로)

 

쿠키 접근제한

Secure 속성이 있는 쿠키는 HTTPS프로토콜을 사용하여 암호화된 경우에만 서버로 전송되어진다. 

보안되지 않은 사이트(URL)는 Secure 특성이 있는 쿠키를 설정할 수 없다.

 

HttpOnly 속성이 있는 쿠키는 js API로 접근할 수 없다. (예를들어 session cookie..) XSS공격을 완화하는데 도움이 된다.

JS로 쿠키 접근을 제한하기 위해서는 HttpOnly 속성을 사용하자.

 

SameSite

SameSite속성은 서버가 cross-origin request(사이트가 등록 가능한 도메인에 의해 정의된) 요청에 쿠키를 보내지 않도록 요구하며, 사이트간 요청 위조 공격(CSRF)으로부터 안전하게 한다.

민감한 정보를 포함하고 있는경우는 쿠키의 유효기간을 짧게 설정하거나, SameSite속성을 Strict나 Lax로 둔다. 그래서 인증쿠키를 cross-origin 요청이 들어왔을때 인증쿠키를 전송하지 않도록 한다.

 

Strict : 쿠키를 원래의 쿠키와 동일한 사이트로만 전송한다.

Lax : Strict와 유사하지만, 사용자가 URL을 통해 외부사이트로 이동할때만 예외를 둔다.

None : cross-site request에 쿠키 전송 제한을 두지 않는다.

 

Set-Cookie: mykey=myvalue; SameSite=Strict

 

'Today I learned' 카테고리의 다른 글

2020 10 26  (0) 2020.10.26
2020 10 25  (0) 2020.10.25
2020 10 21  (0) 2020.10.21
2020 10 16  (0) 2020.10.16
2020 10 14  (0) 2020.10.14

댓글