express cookie 옵션

Creating the dots·2021년 12월 10일
0

project-3-ShallWeHealth

목록 보기
21/26

path

path: /home
쿠키에 접근 가능한 경로를 지정한다.

설정한 경로나 이 경로 하위 경로에 있는 페이지만 쿠키에 접근할 수 있다. 절대 경로여야하며, 미 지정시 기본값은 /이다.

예를 들어, path=/admin인 경우, 설정한 쿠키는 /admin/admin/something에서는 볼 수 있지만, /home이나 /adminPage에서는 볼 수 없다.

domain

domain: site.com
쿠키에 접근 가능한 도메인을 지정한다.

도메인 옵션 미설정시 쿠키를 설정한 도메인에서만 쿠키에 접근할 수 있다.

예를 들어, site.com에서 설정한 쿠키는 other.com에서 얻을 수 없다. 민감한 데이터가 저장된 쿠키는 관련 페이지에서만 볼 수 있도록 하기 위해서 이런 제약사항이 만들어졌다.

만약 forum.site.com과 같은 서브 도메인에서 site.com에서 생성한 쿠키 정보를 얻고 싶다면, site.com에서 쿠키를 설정할때, domain 옵션에 루트 도메인인 domain=.site.com을 명시적으로 설정하면 된다. 이렇게 설정하면 서브 도메인에서도 쿠키에 접근할 수 있다.

expires와 max-age

쿠키의 유효일자 또는 만료기간을 지정한다.

expires나 max-age 옵션을 설정하지 않으면, 브라우저를 닫을때 쿠키도 함께 삭제된다. 이런 쿠키를 세션쿠키(session-cookie)라고 한다.
expires나 max-age 옵션을 설정하면, 브라우저를 닫아도 쿠키가 삭제되지 않는다. expires와 max-age를 둘다 설정하면, max-age가 우선 적용된다.

expires

브라우저는 설정된 유효일자까지 쿠키를 유지하다가, 해당 일자가 되면 쿠키를 자동으로 삭제한다. expires 옵션을 과거로 지정하면 쿠키는 삭제된다.

쿠키의 유효일자는 반드시 GMT 포맷으로 설정해야한다. 다음은 유효기간이 하루인 쿠키를 만드는 예시이다.

//rememberme라는 쿠키에 값 1을 저장하고, 현재시간으로부터 1시간동안 유효
res.cookie('rememberme', '1', { expires: new Date(Date.now() + 3600000) })

max-age

max-age는 expires의 대안으로, 쿠키의 만료기간을 설정할 수 있다. 현재 설정하고자 하는 만료일시까지의 시간을 밀리세컨드로 환산한 값을 설정한다.(express가 아닌 set-cookie로 쿠키 옵션을 설정할 경우, 단위는 '초') 0이나 음수로 설정하면 쿠키는 바로 삭제된다.

res.cookie('rememberme', '1', { maxAge: 3600000 })

sameSite

서로 다른 사이트간의 쿠키 전송에 대한 보안을 설정한다. 여기서 사이트란, 도메인 접미사와 바로 앞의 도메인 부분이 결합된 것이다.
예를 들어, www.web.dev 도메인은 web.dev 사이트의 일부이다. 또한, 사용자가 www.web.dev에 있고, static.web.dev에서 이미지를 요청하는 경우, 이것은 same-site 요청이다.

SameSite: Strict

쿠키가 자사 컨텍스트에서만 전송된다. 사용자 측면에서 쿠키는 해당 사이트가 현재 브라우저의 URL에 표시된 사이트와 일치하는 경우에만 전송된다.

다른 사이트에는 쿠키 전달❌

유튜브에서 보여준 것처럼 B.github.io에서 A.ddns.net/img로 이미지를 요청한 경우, A.ddns.net의 SameSite 속성이 Strict이므로, 다른 사이트에는 쿠키를 전달하지 않으므로 이미지를 볼 수 없다.

같은 사이트라도 링크를 타고 들어간 경우 쿠키 전달❌

이메일 등으로 전달받은 웹사이트의 링크를 클릭해 접속한 경우, 주소가 A.ddns.net이더라도 쿠키를 전달받지 못한다. 이는 유저로 하여금 반드시 주소창에 주소를 입력해 들어가야만 하므로 부정적 사용자 경험을 일으킬 수 있다.

SameSite: Lax

다른 사이트에는 쿠키 전달❌

Strict 속성과 마찬가지로 B.github.io에서 A.ddns.net/img로 이미지를 요청한 경우, A.ddns.net의 SameSite 속성이 Lax이므로, 다른 사이트에는 쿠키를 전달하지 않으므로 이미지를 볼 수 없다.

같은 사이트를 링크 타고 들어간 경우 쿠키 전달⭕

하지만, 이메일 등으로 전달받은 웹사이트의 링크를 클릭해 접속한 경우, Strict와 다르게 쿠키를 전달받을 수 있다.

SameSite: None

다른 사이트에도 쿠키 전달⭕

무.조.건. secure: true 속성과 함께 사용해야한다. 그렇지 않으면 쿠키를 사용할 수 없다. secure 속성은 HTTP 프로토콜에서만 쿠키를 사용할 수 있도록 한다.

SameSite: 설정안한 경우

과거에는 SameSite 속성을 설정하지 않은 경우, SameSite: none, secure: true로 설정되었다. 그러나, 크롬 80버전부터는 SameSite 속성을 설정하지 않은 경우, SameSite: Lax, secure: true로 설정된다.

httpOnly

자바스크립트로는 쿠키에 접근할 수 없도록 막아 XSS(cross-site scripting) 공격을 막을 수 있다. http 요청으로만 쿠키에 접근할 수 있다.

secure

HTTPS에서만 쿠키를 사용할 수 있도록 설정한다.

reference

profile
어제보다 나은 오늘을 만드는 중

0개의 댓글